BrowserSystem.js 1.4 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958
  1. (function(global) {
  2. 'use strict';
  3. if (global.$traceurRuntime) {
  4. return;
  5. }
  6. function setupGlobals(global) {
  7. global.Reflect = global.Reflect || {};
  8. global.Reflect.global = global.Reflect.global || global;
  9. }
  10. setupGlobals(global);
  11. var typeOf = function(x) {
  12. return typeof x;
  13. };
  14. global.$traceurRuntime = {
  15. options: {},
  16. setupGlobals: setupGlobals,
  17. typeof: typeOf
  18. };
  19. })(typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this);
  20. (function() {
  21. function buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {
  22. var out = [];
  23. if (opt_scheme) {
  24. out.push(opt_scheme, ':');
  25. }
  26. if (opt_domain) {
  27. out.push('//');
  28. if (opt_userInfo) {
  29. out.push(opt_userInfo, '@');
  30. }
  31. out.push(opt_domain);
  32. if (opt_port) {
  33. out.push(':', opt_port);
  34. }
  35. }
  36. if (opt_path) {
  37. out.push(opt_path);
  38. }
  39. if (opt_queryData) {
  40. out.push('?', opt_queryData);
  41. }
  42. if (opt_fragment) {
  43. out.push('#', opt_fragment);
  44. }
  45. return out.join('');
  46. }
  47. var splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\w\\d\\-\\u0100-\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\?([^#]*))?' + '(?:#(.*))?' + '$');
  48. var ComponentIndex = {
  49. SCHEME: 1,
  50. USER_INFO: 2,
  51. DOMAIN: 3,
  52. PORT: 4,
  53. PATH: 5,
  54. QUERY_DATA: 6,
  55. FRAGMENT: 7
  56. };
  57. function split(uri) {
  58. return (uri.match(splitRe));
  59. }
  60. function removeDotSegments(path) {
  61. if (path === '/')
  62. return '/';
  63. var leadingSlash = path[0] === '/' ? '/' : '';
  64. var trailingSlash = path.slice(-1) === '/' ? '/' : '';
  65. var segments = path.split('/');
  66. var out = [];
  67. var up = 0;
  68. for (var pos = 0; pos < segments.length; pos++) {
  69. var segment = segments[pos];
  70. switch (segment) {
  71. case '':
  72. case '.':
  73. break;
  74. case '..':
  75. if (out.length)
  76. out.pop();
  77. else
  78. up++;
  79. break;
  80. default:
  81. out.push(segment);
  82. }
  83. }
  84. if (!leadingSlash) {
  85. while (up-- > 0) {
  86. out.unshift('..');
  87. }
  88. if (out.length === 0)
  89. out.push('.');
  90. }
  91. return leadingSlash + out.join('/') + trailingSlash;
  92. }
  93. function joinAndCanonicalizePath(parts) {
  94. var path = parts[ComponentIndex.PATH] || '';
  95. path = removeDotSegments(path);
  96. parts[ComponentIndex.PATH] = path;
  97. return buildFromEncodedParts(parts[ComponentIndex.SCHEME], parts[ComponentIndex.USER_INFO], parts[ComponentIndex.DOMAIN], parts[ComponentIndex.PORT], parts[ComponentIndex.PATH], parts[ComponentIndex.QUERY_DATA], parts[ComponentIndex.FRAGMENT]);
  98. }
  99. function canonicalizeUrl(url) {
  100. var parts = split(url);
  101. return joinAndCanonicalizePath(parts);
  102. }
  103. function resolveUrl(base, url) {
  104. var parts = split(url);
  105. var baseParts = split(base);
  106. if (parts[ComponentIndex.SCHEME]) {
  107. return joinAndCanonicalizePath(parts);
  108. } else {
  109. parts[ComponentIndex.SCHEME] = baseParts[ComponentIndex.SCHEME];
  110. }
  111. for (var i = ComponentIndex.SCHEME; i <= ComponentIndex.PORT; i++) {
  112. if (!parts[i]) {
  113. parts[i] = baseParts[i];
  114. }
  115. }
  116. if (parts[ComponentIndex.PATH][0] == '/') {
  117. return joinAndCanonicalizePath(parts);
  118. }
  119. var path = baseParts[ComponentIndex.PATH];
  120. var index = path.lastIndexOf('/');
  121. path = path.slice(0, index + 1) + parts[ComponentIndex.PATH];
  122. parts[ComponentIndex.PATH] = path;
  123. return joinAndCanonicalizePath(parts);
  124. }
  125. function isAbsolute(name) {
  126. if (!name)
  127. return false;
  128. if (name[0] === '/')
  129. return true;
  130. var parts = split(name);
  131. if (parts[ComponentIndex.SCHEME])
  132. return true;
  133. return false;
  134. }
  135. $traceurRuntime.canonicalizeUrl = canonicalizeUrl;
  136. $traceurRuntime.isAbsolute = isAbsolute;
  137. $traceurRuntime.removeDotSegments = removeDotSegments;
  138. $traceurRuntime.resolveUrl = resolveUrl;
  139. })();
  140. (function(global) {
  141. 'use strict';
  142. var $__3 = $traceurRuntime,
  143. canonicalizeUrl = $__3.canonicalizeUrl,
  144. resolveUrl = $__3.resolveUrl,
  145. isAbsolute = $__3.isAbsolute;
  146. var moduleInstantiators = Object.create(null);
  147. var baseURL;
  148. if (global.location && global.location.href)
  149. baseURL = resolveUrl(global.location.href, './');
  150. else
  151. baseURL = '';
  152. function UncoatedModuleEntry(url, uncoatedModule) {
  153. this.url = url;
  154. this.value_ = uncoatedModule;
  155. }
  156. function ModuleEvaluationError(erroneousModuleName, cause) {
  157. this.message = this.constructor.name + ': ' + this.stripCause(cause) + ' in ' + erroneousModuleName;
  158. if (!(cause instanceof ModuleEvaluationError) && cause.stack)
  159. this.stack = this.stripStack(cause.stack);
  160. else
  161. this.stack = '';
  162. }
  163. ModuleEvaluationError.prototype = Object.create(Error.prototype);
  164. ModuleEvaluationError.prototype.constructor = ModuleEvaluationError;
  165. ModuleEvaluationError.prototype.stripError = function(message) {
  166. return message.replace(/.*Error:/, this.constructor.name + ':');
  167. };
  168. ModuleEvaluationError.prototype.stripCause = function(cause) {
  169. if (!cause)
  170. return '';
  171. if (!cause.message)
  172. return cause + '';
  173. return this.stripError(cause.message);
  174. };
  175. ModuleEvaluationError.prototype.loadedBy = function(moduleName) {
  176. this.stack += '\n loaded by ' + moduleName;
  177. };
  178. ModuleEvaluationError.prototype.stripStack = function(causeStack) {
  179. var stack = [];
  180. causeStack.split('\n').some(function(frame) {
  181. if (/UncoatedModuleInstantiator/.test(frame))
  182. return true;
  183. stack.push(frame);
  184. });
  185. stack[0] = this.stripError(stack[0]);
  186. return stack.join('\n');
  187. };
  188. function beforeLines(lines, number) {
  189. var result = [];
  190. var first = number - 3;
  191. if (first < 0)
  192. first = 0;
  193. for (var i = first; i < number; i++) {
  194. result.push(lines[i]);
  195. }
  196. return result;
  197. }
  198. function afterLines(lines, number) {
  199. var last = number + 1;
  200. if (last > lines.length - 1)
  201. last = lines.length - 1;
  202. var result = [];
  203. for (var i = number; i <= last; i++) {
  204. result.push(lines[i]);
  205. }
  206. return result;
  207. }
  208. function columnSpacing(columns) {
  209. var result = '';
  210. for (var i = 0; i < columns - 1; i++) {
  211. result += '-';
  212. }
  213. return result;
  214. }
  215. function UncoatedModuleInstantiator(url, func) {
  216. UncoatedModuleEntry.call(this, url, null);
  217. this.func = func;
  218. }
  219. UncoatedModuleInstantiator.prototype = Object.create(UncoatedModuleEntry.prototype);
  220. UncoatedModuleInstantiator.prototype.getUncoatedModule = function() {
  221. var $__2 = this;
  222. if (this.value_)
  223. return this.value_;
  224. try {
  225. var relativeRequire;
  226. if (typeof $traceurRuntime !== undefined && $traceurRuntime.require) {
  227. relativeRequire = $traceurRuntime.require.bind(null, this.url);
  228. }
  229. return this.value_ = this.func.call(global, relativeRequire);
  230. } catch (ex) {
  231. if (ex instanceof ModuleEvaluationError) {
  232. ex.loadedBy(this.url);
  233. throw ex;
  234. }
  235. if (ex.stack) {
  236. var lines = this.func.toString().split('\n');
  237. var evaled = [];
  238. ex.stack.split('\n').some(function(frame, index) {
  239. if (frame.indexOf('UncoatedModuleInstantiator.getUncoatedModule') > 0)
  240. return true;
  241. var m = /(at\s[^\s]*\s).*>:(\d*):(\d*)\)/.exec(frame);
  242. if (m) {
  243. var line = parseInt(m[2], 10);
  244. evaled = evaled.concat(beforeLines(lines, line));
  245. if (index === 1) {
  246. evaled.push(columnSpacing(m[3]) + '^ ' + $__2.url);
  247. } else {
  248. evaled.push(columnSpacing(m[3]) + '^');
  249. }
  250. evaled = evaled.concat(afterLines(lines, line));
  251. evaled.push('= = = = = = = = =');
  252. } else {
  253. evaled.push(frame);
  254. }
  255. });
  256. ex.stack = evaled.join('\n');
  257. }
  258. throw new ModuleEvaluationError(this.url, ex);
  259. }
  260. };
  261. function getUncoatedModuleInstantiator(name) {
  262. if (!name)
  263. return;
  264. var url = ModuleStore.normalize(name);
  265. return moduleInstantiators[url];
  266. }
  267. ;
  268. var moduleInstances = Object.create(null);
  269. var liveModuleSentinel = {};
  270. function Module(uncoatedModule) {
  271. var isLive = arguments[1];
  272. var coatedModule = Object.create(null);
  273. Object.getOwnPropertyNames(uncoatedModule).forEach(function(name) {
  274. var getter,
  275. value;
  276. if (isLive === liveModuleSentinel) {
  277. var descr = Object.getOwnPropertyDescriptor(uncoatedModule, name);
  278. if (descr.get)
  279. getter = descr.get;
  280. }
  281. if (!getter) {
  282. value = uncoatedModule[name];
  283. getter = function() {
  284. return value;
  285. };
  286. }
  287. Object.defineProperty(coatedModule, name, {
  288. get: getter,
  289. enumerable: true
  290. });
  291. });
  292. Object.preventExtensions(coatedModule);
  293. return coatedModule;
  294. }
  295. var ModuleStore = {
  296. normalize: function(name, refererName, refererAddress) {
  297. if (typeof name !== 'string')
  298. throw new TypeError('module name must be a string, not ' + typeof name);
  299. if (isAbsolute(name))
  300. return canonicalizeUrl(name);
  301. if (/[^\.]\/\.\.\//.test(name)) {
  302. throw new Error('module name embeds /../: ' + name);
  303. }
  304. if (name[0] === '.' && refererName)
  305. return resolveUrl(refererName, name);
  306. return canonicalizeUrl(name);
  307. },
  308. get: function(normalizedName) {
  309. var m = getUncoatedModuleInstantiator(normalizedName);
  310. if (!m)
  311. return undefined;
  312. var moduleInstance = moduleInstances[m.url];
  313. if (moduleInstance)
  314. return moduleInstance;
  315. moduleInstance = Module(m.getUncoatedModule(), liveModuleSentinel);
  316. return moduleInstances[m.url] = moduleInstance;
  317. },
  318. set: function(normalizedName, module) {
  319. normalizedName = String(normalizedName);
  320. moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, function() {
  321. return module;
  322. });
  323. moduleInstances[normalizedName] = module;
  324. },
  325. get baseURL() {
  326. return baseURL;
  327. },
  328. set baseURL(v) {
  329. baseURL = String(v);
  330. },
  331. registerModule: function(name, deps, func) {
  332. var normalizedName = ModuleStore.normalize(name);
  333. if (moduleInstantiators[normalizedName])
  334. throw new Error('duplicate module named ' + normalizedName);
  335. moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, func);
  336. },
  337. bundleStore: Object.create(null),
  338. register: function(name, deps, func) {
  339. if (!deps || !deps.length && !func.length) {
  340. this.registerModule(name, deps, func);
  341. } else {
  342. this.bundleStore[name] = {
  343. deps: deps,
  344. execute: function() {
  345. var $__2 = arguments;
  346. var depMap = {};
  347. deps.forEach(function(dep, index) {
  348. return depMap[dep] = $__2[index];
  349. });
  350. var registryEntry = func.call(this, depMap);
  351. registryEntry.execute.call(this);
  352. return registryEntry.exports;
  353. }
  354. };
  355. }
  356. },
  357. getAnonymousModule: function(func) {
  358. return new Module(func(), liveModuleSentinel);
  359. }
  360. };
  361. var moduleStoreModule = new Module({ModuleStore: ModuleStore});
  362. ModuleStore.set('@traceur/src/runtime/ModuleStore.js', moduleStoreModule);
  363. var setupGlobals = $traceurRuntime.setupGlobals;
  364. $traceurRuntime.setupGlobals = function(global) {
  365. setupGlobals(global);
  366. };
  367. $traceurRuntime.ModuleStore = ModuleStore;
  368. $traceurRuntime.registerModule = ModuleStore.registerModule.bind(ModuleStore);
  369. $traceurRuntime.getModule = ModuleStore.get;
  370. $traceurRuntime.setModule = ModuleStore.set;
  371. $traceurRuntime.normalizeModuleName = ModuleStore.normalize;
  372. })(typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this);
  373. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/new-unique-string.js", [], function() {
  374. "use strict";
  375. var __moduleName = "traceur@0.0.112/src/runtime/new-unique-string.js";
  376. var random = Math.random;
  377. var counter = Date.now() % 1e9;
  378. function newUniqueString() {
  379. return '__$' + (random() * 1e9 >>> 1) + '$' + ++counter + '$__';
  380. }
  381. return {get default() {
  382. return newUniqueString;
  383. }};
  384. });
  385. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/has-native-symbols.js", [], function() {
  386. "use strict";
  387. var __moduleName = "traceur@0.0.112/src/runtime/has-native-symbols.js";
  388. var v = !!Object.getOwnPropertySymbols && typeof Symbol === 'function';
  389. function hasNativeSymbol() {
  390. return v;
  391. }
  392. return {get default() {
  393. return hasNativeSymbol;
  394. }};
  395. });
  396. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/symbols.js", [], function() {
  397. "use strict";
  398. var __moduleName = "traceur@0.0.112/src/runtime/modules/symbols.js";
  399. var newUniqueString = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../new-unique-string.js", "traceur@0.0.112/src/runtime/modules/symbols.js")).default;
  400. var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/modules/symbols.js")).default;
  401. var $create = Object.create;
  402. var $defineProperty = Object.defineProperty;
  403. var $freeze = Object.freeze;
  404. var $getOwnPropertyNames = Object.getOwnPropertyNames;
  405. var $keys = Object.keys;
  406. var $TypeError = TypeError;
  407. function nonEnum(value) {
  408. return {
  409. configurable: true,
  410. enumerable: false,
  411. value: value,
  412. writable: true
  413. };
  414. }
  415. var symbolInternalProperty = newUniqueString();
  416. var symbolDescriptionProperty = newUniqueString();
  417. var symbolDataProperty = newUniqueString();
  418. var symbolValues = $create(null);
  419. var SymbolImpl = function Symbol(description) {
  420. var value = new SymbolValue(description);
  421. if (!(this instanceof SymbolImpl))
  422. return value;
  423. throw new $TypeError('Symbol cannot be new\'ed');
  424. };
  425. $defineProperty(SymbolImpl.prototype, 'constructor', nonEnum(SymbolImpl));
  426. $defineProperty(SymbolImpl.prototype, 'toString', nonEnum(function() {
  427. var symbolValue = this[symbolDataProperty];
  428. return symbolValue[symbolInternalProperty];
  429. }));
  430. $defineProperty(SymbolImpl.prototype, 'valueOf', nonEnum(function() {
  431. var symbolValue = this[symbolDataProperty];
  432. if (!symbolValue)
  433. throw $TypeError('Conversion from symbol to string');
  434. return symbolValue[symbolInternalProperty];
  435. }));
  436. function SymbolValue(description) {
  437. var key = newUniqueString();
  438. $defineProperty(this, symbolDataProperty, {value: this});
  439. $defineProperty(this, symbolInternalProperty, {value: key});
  440. $defineProperty(this, symbolDescriptionProperty, {value: description});
  441. $freeze(this);
  442. symbolValues[key] = this;
  443. }
  444. $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(SymbolImpl));
  445. $defineProperty(SymbolValue.prototype, 'toString', {
  446. value: SymbolImpl.prototype.toString,
  447. enumerable: false
  448. });
  449. $defineProperty(SymbolValue.prototype, 'valueOf', {
  450. value: SymbolImpl.prototype.valueOf,
  451. enumerable: false
  452. });
  453. $freeze(SymbolValue.prototype);
  454. function isSymbolString(s) {
  455. return symbolValues[s];
  456. }
  457. function removeSymbolKeys(array) {
  458. var rv = [];
  459. for (var i = 0; i < array.length; i++) {
  460. if (!isSymbolString(array[i])) {
  461. rv.push(array[i]);
  462. }
  463. }
  464. return rv;
  465. }
  466. function getOwnPropertyNames(object) {
  467. return removeSymbolKeys($getOwnPropertyNames(object));
  468. }
  469. function keys(object) {
  470. return removeSymbolKeys($keys(object));
  471. }
  472. function getOwnPropertySymbols(object) {
  473. var rv = [];
  474. var names = $getOwnPropertyNames(object);
  475. for (var i = 0; i < names.length; i++) {
  476. var symbol = symbolValues[names[i]];
  477. if (symbol) {
  478. rv.push(symbol);
  479. }
  480. }
  481. return rv;
  482. }
  483. function polyfillSymbol(global) {
  484. var Object = global.Object;
  485. if (!hasNativeSymbol()) {
  486. global.Symbol = SymbolImpl;
  487. Object.getOwnPropertyNames = getOwnPropertyNames;
  488. Object.keys = keys;
  489. $defineProperty(Object, 'getOwnPropertySymbols', nonEnum(getOwnPropertySymbols));
  490. }
  491. if (!global.Symbol.iterator) {
  492. global.Symbol.iterator = global.Symbol('Symbol.iterator');
  493. }
  494. if (!global.Symbol.observer) {
  495. global.Symbol.observer = global.Symbol('Symbol.observer');
  496. }
  497. }
  498. var g = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : (void 0);
  499. polyfillSymbol(g);
  500. var typeOf = hasNativeSymbol() ? function(x) {
  501. return typeof x;
  502. } : function(x) {
  503. return x instanceof SymbolValue ? 'symbol' : typeof x;
  504. };
  505. return {get typeof() {
  506. return typeOf;
  507. }};
  508. });
  509. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/typeof.js", [], function() {
  510. "use strict";
  511. var __moduleName = "traceur@0.0.112/src/runtime/modules/typeof.js";
  512. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_symbols_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./symbols.js", "traceur@0.0.112/src/runtime/modules/typeof.js"));
  513. return {get default() {
  514. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_symbols_46_js__.typeof;
  515. }};
  516. });
  517. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/symbols.js", [], function() {
  518. "use strict";
  519. var __moduleName = "traceur@0.0.112/src/runtime/symbols.js";
  520. var t = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/typeof.js", "traceur@0.0.112/src/runtime/symbols.js")).default;
  521. $traceurRuntime.typeof = t;
  522. return {};
  523. });
  524. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createClass.js", [], function() {
  525. "use strict";
  526. var __moduleName = "traceur@0.0.112/src/runtime/modules/createClass.js";
  527. var $Object = Object;
  528. var $TypeError = TypeError;
  529. var $__1 = Object,
  530. create = $__1.create,
  531. defineProperties = $__1.defineProperties,
  532. defineProperty = $__1.defineProperty,
  533. getOwnPropertyDescriptor = $__1.getOwnPropertyDescriptor,
  534. getOwnPropertyNames = $__1.getOwnPropertyNames,
  535. getOwnPropertySymbols = $__1.getOwnPropertySymbols;
  536. function forEachPropertyKey(object, f) {
  537. getOwnPropertyNames(object).forEach(f);
  538. if (getOwnPropertySymbols) {
  539. getOwnPropertySymbols(object).forEach(f);
  540. }
  541. }
  542. function getDescriptors(object) {
  543. var descriptors = {};
  544. forEachPropertyKey(object, function(key) {
  545. descriptors[key] = getOwnPropertyDescriptor(object, key);
  546. descriptors[key].enumerable = false;
  547. });
  548. return descriptors;
  549. }
  550. var nonEnum = {enumerable: false};
  551. function makePropertiesNonEnumerable(object) {
  552. forEachPropertyKey(object, function(key) {
  553. defineProperty(object, key, nonEnum);
  554. });
  555. }
  556. function createClass(ctor, object, staticObject, superClass) {
  557. defineProperty(object, 'constructor', {
  558. value: ctor,
  559. configurable: true,
  560. enumerable: false,
  561. writable: true
  562. });
  563. if (arguments.length > 3) {
  564. if (typeof superClass === 'function')
  565. ctor.__proto__ = superClass;
  566. ctor.prototype = create(getProtoParent(superClass), getDescriptors(object));
  567. } else {
  568. makePropertiesNonEnumerable(object);
  569. ctor.prototype = object;
  570. }
  571. defineProperty(ctor, 'prototype', {
  572. configurable: false,
  573. writable: false
  574. });
  575. return defineProperties(ctor, getDescriptors(staticObject));
  576. }
  577. function getProtoParent(superClass) {
  578. if (typeof superClass === 'function') {
  579. var prototype = superClass.prototype;
  580. if ($Object(prototype) === prototype || prototype === null)
  581. return superClass.prototype;
  582. throw new $TypeError('super prototype must be an Object or null');
  583. }
  584. if (superClass === null)
  585. return null;
  586. throw new $TypeError(("Super expression must either be null or a function, not " + typeof superClass + "."));
  587. }
  588. return {get default() {
  589. return createClass;
  590. }};
  591. });
  592. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superConstructor.js", [], function() {
  593. "use strict";
  594. var __moduleName = "traceur@0.0.112/src/runtime/modules/superConstructor.js";
  595. function superConstructor(ctor) {
  596. return ctor.__proto__;
  597. }
  598. return {get default() {
  599. return superConstructor;
  600. }};
  601. });
  602. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superDescriptor.js", [], function() {
  603. "use strict";
  604. var __moduleName = "traceur@0.0.112/src/runtime/modules/superDescriptor.js";
  605. var $__0 = Object,
  606. getOwnPropertyDescriptor = $__0.getOwnPropertyDescriptor,
  607. getPrototypeOf = $__0.getPrototypeOf;
  608. function superDescriptor(homeObject, name) {
  609. var proto = getPrototypeOf(homeObject);
  610. do {
  611. var result = getOwnPropertyDescriptor(proto, name);
  612. if (result)
  613. return result;
  614. proto = getPrototypeOf(proto);
  615. } while (proto);
  616. return undefined;
  617. }
  618. return {get default() {
  619. return superDescriptor;
  620. }};
  621. });
  622. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superGet.js", [], function() {
  623. "use strict";
  624. var __moduleName = "traceur@0.0.112/src/runtime/modules/superGet.js";
  625. var superDescriptor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./superDescriptor.js", "traceur@0.0.112/src/runtime/modules/superGet.js")).default;
  626. function superGet(self, homeObject, name) {
  627. var descriptor = superDescriptor(homeObject, name);
  628. if (descriptor) {
  629. var value = descriptor.value;
  630. if (value)
  631. return value;
  632. if (!descriptor.get)
  633. return value;
  634. return descriptor.get.call(self);
  635. }
  636. return undefined;
  637. }
  638. return {get default() {
  639. return superGet;
  640. }};
  641. });
  642. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superSet.js", [], function() {
  643. "use strict";
  644. var __moduleName = "traceur@0.0.112/src/runtime/modules/superSet.js";
  645. var superDescriptor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./superDescriptor.js", "traceur@0.0.112/src/runtime/modules/superSet.js")).default;
  646. var $TypeError = TypeError;
  647. function superSet(self, homeObject, name, value) {
  648. var descriptor = superDescriptor(homeObject, name);
  649. if (descriptor && descriptor.set) {
  650. descriptor.set.call(self, value);
  651. return value;
  652. }
  653. throw $TypeError(("super has no setter '" + name + "'."));
  654. }
  655. return {get default() {
  656. return superSet;
  657. }};
  658. });
  659. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/classes.js", [], function() {
  660. "use strict";
  661. var __moduleName = "traceur@0.0.112/src/runtime/classes.js";
  662. var createClass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createClass.js", "traceur@0.0.112/src/runtime/classes.js")).default;
  663. var superConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superConstructor.js", "traceur@0.0.112/src/runtime/classes.js")).default;
  664. var superGet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superGet.js", "traceur@0.0.112/src/runtime/classes.js")).default;
  665. var superSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superSet.js", "traceur@0.0.112/src/runtime/classes.js")).default;
  666. $traceurRuntime.createClass = createClass;
  667. $traceurRuntime.superConstructor = superConstructor;
  668. $traceurRuntime.superGet = superGet;
  669. $traceurRuntime.superSet = superSet;
  670. return {};
  671. });
  672. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/exportStar.js", [], function() {
  673. "use strict";
  674. var __moduleName = "traceur@0.0.112/src/runtime/modules/exportStar.js";
  675. var $__1 = Object,
  676. defineProperty = $__1.defineProperty,
  677. getOwnPropertyNames = $__1.getOwnPropertyNames;
  678. function exportStar(object) {
  679. var $__2 = arguments,
  680. $__3 = function(i) {
  681. var mod = $__2[i];
  682. var names = getOwnPropertyNames(mod);
  683. var $__5 = function(j) {
  684. var name = names[j];
  685. if (name === '__esModule' || name === 'default') {
  686. return 0;
  687. }
  688. defineProperty(object, name, {
  689. get: function() {
  690. return mod[name];
  691. },
  692. enumerable: true
  693. });
  694. },
  695. $__6;
  696. $__4: for (var j = 0; j < names.length; j++) {
  697. $__6 = $__5(j);
  698. switch ($__6) {
  699. case 0:
  700. continue $__4;
  701. }
  702. }
  703. };
  704. for (var i = 1; i < arguments.length; i++) {
  705. $__3(i);
  706. }
  707. return object;
  708. }
  709. return {get default() {
  710. return exportStar;
  711. }};
  712. });
  713. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/exportStar.js", [], function() {
  714. "use strict";
  715. var __moduleName = "traceur@0.0.112/src/runtime/exportStar.js";
  716. var exportStar = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/exportStar.js", "traceur@0.0.112/src/runtime/exportStar.js")).default;
  717. $traceurRuntime.exportStar = exportStar;
  718. return {};
  719. });
  720. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private-symbol.js", [], function() {
  721. "use strict";
  722. var __moduleName = "traceur@0.0.112/src/runtime/private-symbol.js";
  723. var newUniqueString = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./new-unique-string.js", "traceur@0.0.112/src/runtime/private-symbol.js")).default;
  724. var $Symbol = typeof Symbol === 'function' ? Symbol : undefined;
  725. var $getOwnPropertySymbols = Object.getOwnPropertySymbols;
  726. var $create = Object.create;
  727. var privateNames = $create(null);
  728. function isPrivateSymbol(s) {
  729. return privateNames[s];
  730. }
  731. ;
  732. function createPrivateSymbol() {
  733. var s = ($Symbol || newUniqueString)();
  734. privateNames[s] = true;
  735. return s;
  736. }
  737. ;
  738. function hasPrivate(obj, sym) {
  739. return hasOwnProperty.call(obj, sym);
  740. }
  741. ;
  742. function deletePrivate(obj, sym) {
  743. if (!hasPrivate(obj, sym)) {
  744. return false;
  745. }
  746. delete obj[sym];
  747. return true;
  748. }
  749. ;
  750. function setPrivate(obj, sym, val) {
  751. obj[sym] = val;
  752. }
  753. ;
  754. function getPrivate(obj, sym) {
  755. var val = obj[sym];
  756. if (val === undefined)
  757. return undefined;
  758. return hasOwnProperty.call(obj, sym) ? val : undefined;
  759. }
  760. ;
  761. function init() {
  762. if ($getOwnPropertySymbols) {
  763. Object.getOwnPropertySymbols = function getOwnPropertySymbols(object) {
  764. var rv = [];
  765. var symbols = $getOwnPropertySymbols(object);
  766. for (var i = 0; i < symbols.length; i++) {
  767. var symbol = symbols[i];
  768. if (!isPrivateSymbol(symbol)) {
  769. rv.push(symbol);
  770. }
  771. }
  772. return rv;
  773. };
  774. }
  775. }
  776. return {
  777. get isPrivateSymbol() {
  778. return isPrivateSymbol;
  779. },
  780. get createPrivateSymbol() {
  781. return createPrivateSymbol;
  782. },
  783. get hasPrivate() {
  784. return hasPrivate;
  785. },
  786. get deletePrivate() {
  787. return deletePrivate;
  788. },
  789. get setPrivate() {
  790. return setPrivate;
  791. },
  792. get getPrivate() {
  793. return getPrivate;
  794. },
  795. get init() {
  796. return init;
  797. }
  798. };
  799. });
  800. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private-weak-map.js", [], function() {
  801. "use strict";
  802. var __moduleName = "traceur@0.0.112/src/runtime/private-weak-map.js";
  803. var $WeakMap = typeof WeakMap === 'function' ? WeakMap : undefined;
  804. function isPrivateSymbol(s) {
  805. return false;
  806. }
  807. function createPrivateSymbol() {
  808. return new $WeakMap();
  809. }
  810. function hasPrivate(obj, sym) {
  811. return sym.has(obj);
  812. }
  813. function deletePrivate(obj, sym) {
  814. return sym.delete(obj);
  815. }
  816. function setPrivate(obj, sym, val) {
  817. sym.set(obj, val);
  818. }
  819. function getPrivate(obj, sym) {
  820. return sym.get(obj);
  821. }
  822. function init() {}
  823. return {
  824. get isPrivateSymbol() {
  825. return isPrivateSymbol;
  826. },
  827. get createPrivateSymbol() {
  828. return createPrivateSymbol;
  829. },
  830. get hasPrivate() {
  831. return hasPrivate;
  832. },
  833. get deletePrivate() {
  834. return deletePrivate;
  835. },
  836. get setPrivate() {
  837. return setPrivate;
  838. },
  839. get getPrivate() {
  840. return getPrivate;
  841. },
  842. get init() {
  843. return init;
  844. }
  845. };
  846. });
  847. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private.js", [], function() {
  848. "use strict";
  849. var __moduleName = "traceur@0.0.112/src/runtime/private.js";
  850. var sym = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./private-symbol.js", "traceur@0.0.112/src/runtime/private.js"));
  851. var weak = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./private-weak-map.js", "traceur@0.0.112/src/runtime/private.js"));
  852. var hasWeakMap = typeof WeakMap === 'function';
  853. var m = hasWeakMap ? weak : sym;
  854. var isPrivateSymbol = m.isPrivateSymbol;
  855. var createPrivateSymbol = m.createPrivateSymbol;
  856. var hasPrivate = m.hasPrivate;
  857. var deletePrivate = m.deletePrivate;
  858. var setPrivate = m.setPrivate;
  859. var getPrivate = m.getPrivate;
  860. m.init();
  861. return {
  862. get isPrivateSymbol() {
  863. return isPrivateSymbol;
  864. },
  865. get createPrivateSymbol() {
  866. return createPrivateSymbol;
  867. },
  868. get hasPrivate() {
  869. return hasPrivate;
  870. },
  871. get deletePrivate() {
  872. return deletePrivate;
  873. },
  874. get setPrivate() {
  875. return setPrivate;
  876. },
  877. get getPrivate() {
  878. return getPrivate;
  879. }
  880. };
  881. });
  882. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/properTailCalls.js", [], function() {
  883. "use strict";
  884. var __moduleName = "traceur@0.0.112/src/runtime/modules/properTailCalls.js";
  885. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/properTailCalls.js")),
  886. getPrivate = $__0.getPrivate,
  887. setPrivate = $__0.setPrivate,
  888. createPrivateSymbol = $__0.createPrivateSymbol;
  889. var $apply = Function.prototype.call.bind(Function.prototype.apply);
  890. var CONTINUATION_TYPE = Object.create(null);
  891. var isTailRecursiveName = null;
  892. function createContinuation(operand, thisArg, argsArray) {
  893. return [CONTINUATION_TYPE, operand, thisArg, argsArray];
  894. }
  895. function isContinuation(object) {
  896. return object && object[0] === CONTINUATION_TYPE;
  897. }
  898. function $bind(operand, thisArg, args) {
  899. var argArray = [thisArg];
  900. for (var i = 0; i < args.length; i++) {
  901. argArray[i + 1] = args[i];
  902. }
  903. var func = $apply(Function.prototype.bind, operand, argArray);
  904. return func;
  905. }
  906. function $construct(func, argArray) {
  907. var object = new ($bind(func, null, argArray));
  908. return object;
  909. }
  910. function isTailRecursive(func) {
  911. return !!getPrivate(func, isTailRecursiveName);
  912. }
  913. function tailCall(func, thisArg, argArray) {
  914. var continuation = argArray[0];
  915. if (isContinuation(continuation)) {
  916. continuation = $apply(func, thisArg, continuation[3]);
  917. return continuation;
  918. }
  919. continuation = createContinuation(func, thisArg, argArray);
  920. while (true) {
  921. if (isTailRecursive(func)) {
  922. continuation = $apply(func, continuation[2], [continuation]);
  923. } else {
  924. continuation = $apply(func, continuation[2], continuation[3]);
  925. }
  926. if (!isContinuation(continuation)) {
  927. return continuation;
  928. }
  929. func = continuation[1];
  930. }
  931. }
  932. function construct() {
  933. var object;
  934. if (isTailRecursive(this)) {
  935. object = $construct(this, [createContinuation(null, null, arguments)]);
  936. } else {
  937. object = $construct(this, arguments);
  938. }
  939. return object;
  940. }
  941. function setupProperTailCalls() {
  942. isTailRecursiveName = createPrivateSymbol();
  943. Function.prototype.call = initTailRecursiveFunction(function call(thisArg) {
  944. var result = tailCall(function(thisArg) {
  945. var argArray = [];
  946. for (var i = 1; i < arguments.length; ++i) {
  947. argArray[i - 1] = arguments[i];
  948. }
  949. var continuation = createContinuation(this, thisArg, argArray);
  950. return continuation;
  951. }, this, arguments);
  952. return result;
  953. });
  954. Function.prototype.apply = initTailRecursiveFunction(function apply(thisArg, argArray) {
  955. var result = tailCall(function(thisArg, argArray) {
  956. var continuation = createContinuation(this, thisArg, argArray);
  957. return continuation;
  958. }, this, arguments);
  959. return result;
  960. });
  961. }
  962. function initTailRecursiveFunction(func) {
  963. if (isTailRecursiveName === null) {
  964. setupProperTailCalls();
  965. }
  966. setPrivate(func, isTailRecursiveName, true);
  967. return func;
  968. }
  969. return {
  970. get createContinuation() {
  971. return createContinuation;
  972. },
  973. get tailCall() {
  974. return tailCall;
  975. },
  976. get construct() {
  977. return construct;
  978. },
  979. get initTailRecursiveFunction() {
  980. return initTailRecursiveFunction;
  981. }
  982. };
  983. });
  984. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js", [], function() {
  985. "use strict";
  986. var __moduleName = "traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js";
  987. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js"));
  988. return {get default() {
  989. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.initTailRecursiveFunction;
  990. }};
  991. });
  992. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/call.js", [], function() {
  993. "use strict";
  994. var __moduleName = "traceur@0.0.112/src/runtime/modules/call.js";
  995. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/call.js"));
  996. return {get default() {
  997. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.tailCall;
  998. }};
  999. });
  1000. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/continuation.js", [], function() {
  1001. "use strict";
  1002. var __moduleName = "traceur@0.0.112/src/runtime/modules/continuation.js";
  1003. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/continuation.js"));
  1004. return {get default() {
  1005. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.createContinuation;
  1006. }};
  1007. });
  1008. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/construct.js", [], function() {
  1009. "use strict";
  1010. var __moduleName = "traceur@0.0.112/src/runtime/modules/construct.js";
  1011. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/construct.js"));
  1012. return {get default() {
  1013. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.construct;
  1014. }};
  1015. });
  1016. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/properTailCalls.js", [], function() {
  1017. "use strict";
  1018. var __moduleName = "traceur@0.0.112/src/runtime/properTailCalls.js";
  1019. var initTailRecursiveFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initTailRecursiveFunction.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default;
  1020. var call = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/call.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default;
  1021. var continuation = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/continuation.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default;
  1022. var construct = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/construct.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default;
  1023. $traceurRuntime.initTailRecursiveFunction = initTailRecursiveFunction;
  1024. $traceurRuntime.call = call;
  1025. $traceurRuntime.continuation = continuation;
  1026. $traceurRuntime.construct = construct;
  1027. return {};
  1028. });
  1029. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/relativeRequire.js", [], function() {
  1030. "use strict";
  1031. var __moduleName = "traceur@0.0.112/src/runtime/relativeRequire.js";
  1032. var path;
  1033. function relativeRequire(callerPath, requiredPath) {
  1034. path = path || typeof require !== 'undefined' && require('path');
  1035. function isDirectory(path) {
  1036. return path.slice(-1) === '/';
  1037. }
  1038. function isAbsolute(path) {
  1039. return path[0] === '/';
  1040. }
  1041. function isRelative(path) {
  1042. return path[0] === '.';
  1043. }
  1044. if (isDirectory(requiredPath) || isAbsolute(requiredPath))
  1045. return;
  1046. return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath);
  1047. }
  1048. $traceurRuntime.require = relativeRequire;
  1049. return {};
  1050. });
  1051. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/checkObjectCoercible.js", [], function() {
  1052. "use strict";
  1053. var __moduleName = "traceur@0.0.112/src/runtime/checkObjectCoercible.js";
  1054. var $TypeError = TypeError;
  1055. function checkObjectCoercible(v) {
  1056. if (v === null || v === undefined) {
  1057. throw new $TypeError('Value cannot be converted to an Object');
  1058. }
  1059. return v;
  1060. }
  1061. return {get default() {
  1062. return checkObjectCoercible;
  1063. }};
  1064. });
  1065. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spread.js", [], function() {
  1066. "use strict";
  1067. var __moduleName = "traceur@0.0.112/src/runtime/modules/spread.js";
  1068. var checkObjectCoercible = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../checkObjectCoercible.js", "traceur@0.0.112/src/runtime/modules/spread.js")).default;
  1069. function spread() {
  1070. var rv = [],
  1071. j = 0,
  1072. iterResult;
  1073. for (var i = 0; i < arguments.length; i++) {
  1074. var valueToSpread = checkObjectCoercible(arguments[i]);
  1075. if (typeof valueToSpread[Symbol.iterator] !== 'function') {
  1076. throw new TypeError('Cannot spread non-iterable object.');
  1077. }
  1078. var iter = valueToSpread[Symbol.iterator]();
  1079. while (!(iterResult = iter.next()).done) {
  1080. rv[j++] = iterResult.value;
  1081. }
  1082. }
  1083. return rv;
  1084. }
  1085. return {get default() {
  1086. return spread;
  1087. }};
  1088. });
  1089. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/spread.js", [], function() {
  1090. "use strict";
  1091. var __moduleName = "traceur@0.0.112/src/runtime/spread.js";
  1092. var spread = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spread.js", "traceur@0.0.112/src/runtime/spread.js")).default;
  1093. $traceurRuntime.spread = spread;
  1094. return {};
  1095. });
  1096. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/iteratorToArray.js", [], function() {
  1097. "use strict";
  1098. var __moduleName = "traceur@0.0.112/src/runtime/modules/iteratorToArray.js";
  1099. function iteratorToArray(iter) {
  1100. var rv = [];
  1101. var i = 0;
  1102. var tmp;
  1103. while (!(tmp = iter.next()).done) {
  1104. rv[i++] = tmp.value;
  1105. }
  1106. return rv;
  1107. }
  1108. return {get default() {
  1109. return iteratorToArray;
  1110. }};
  1111. });
  1112. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/destructuring.js", [], function() {
  1113. "use strict";
  1114. var __moduleName = "traceur@0.0.112/src/runtime/destructuring.js";
  1115. var iteratorToArray = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/iteratorToArray.js", "traceur@0.0.112/src/runtime/destructuring.js")).default;
  1116. $traceurRuntime.iteratorToArray = iteratorToArray;
  1117. return {};
  1118. });
  1119. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/async.js", [], function() {
  1120. "use strict";
  1121. var __moduleName = "traceur@0.0.112/src/runtime/modules/async.js";
  1122. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/async.js")),
  1123. createPrivateSymbol = $__12.createPrivateSymbol,
  1124. getPrivate = $__12.getPrivate,
  1125. setPrivate = $__12.setPrivate;
  1126. var $__11 = Object,
  1127. create = $__11.create,
  1128. defineProperty = $__11.defineProperty;
  1129. var observeName = createPrivateSymbol();
  1130. function AsyncGeneratorFunction() {}
  1131. function AsyncGeneratorFunctionPrototype() {}
  1132. AsyncGeneratorFunction.prototype = AsyncGeneratorFunctionPrototype;
  1133. AsyncGeneratorFunctionPrototype.constructor = AsyncGeneratorFunction;
  1134. defineProperty(AsyncGeneratorFunctionPrototype, 'constructor', {enumerable: false});
  1135. var AsyncGeneratorContext = function() {
  1136. function AsyncGeneratorContext(observer) {
  1137. var $__2 = this;
  1138. this.decoratedObserver = createDecoratedGenerator(observer, function() {
  1139. $__2.done = true;
  1140. });
  1141. this.done = false;
  1142. this.inReturn = false;
  1143. }
  1144. return ($traceurRuntime.createClass)(AsyncGeneratorContext, {
  1145. throw: function(error) {
  1146. if (!this.inReturn) {
  1147. throw error;
  1148. }
  1149. },
  1150. yield: function(value) {
  1151. if (this.done) {
  1152. this.inReturn = true;
  1153. throw undefined;
  1154. }
  1155. var result;
  1156. try {
  1157. result = this.decoratedObserver.next(value);
  1158. } catch (e) {
  1159. this.done = true;
  1160. throw e;
  1161. }
  1162. if (result === undefined) {
  1163. return;
  1164. }
  1165. if (result.done) {
  1166. this.done = true;
  1167. this.inReturn = true;
  1168. throw undefined;
  1169. }
  1170. return result.value;
  1171. },
  1172. yieldFor: function(observable) {
  1173. var ctx = this;
  1174. return observeForEach(observable[Symbol.observer].bind(observable), function(value) {
  1175. if (ctx.done) {
  1176. this.return();
  1177. return;
  1178. }
  1179. var result;
  1180. try {
  1181. result = ctx.decoratedObserver.next(value);
  1182. } catch (e) {
  1183. ctx.done = true;
  1184. throw e;
  1185. }
  1186. if (result === undefined) {
  1187. return;
  1188. }
  1189. if (result.done) {
  1190. ctx.done = true;
  1191. }
  1192. return result;
  1193. });
  1194. }
  1195. }, {});
  1196. }();
  1197. AsyncGeneratorFunctionPrototype.prototype[Symbol.observer] = function(observer) {
  1198. var observe = getPrivate(this, observeName);
  1199. var ctx = new AsyncGeneratorContext(observer);
  1200. schedule(function() {
  1201. return observe(ctx);
  1202. }).then(function(value) {
  1203. if (!ctx.done) {
  1204. ctx.decoratedObserver.return(value);
  1205. }
  1206. }).catch(function(error) {
  1207. if (!ctx.done) {
  1208. ctx.decoratedObserver.throw(error);
  1209. }
  1210. });
  1211. return ctx.decoratedObserver;
  1212. };
  1213. defineProperty(AsyncGeneratorFunctionPrototype.prototype, Symbol.observer, {enumerable: false});
  1214. function initAsyncGeneratorFunction(functionObject) {
  1215. functionObject.prototype = create(AsyncGeneratorFunctionPrototype.prototype);
  1216. functionObject.__proto__ = AsyncGeneratorFunctionPrototype;
  1217. return functionObject;
  1218. }
  1219. function createAsyncGeneratorInstance(observe, functionObject) {
  1220. for (var args = [],
  1221. $__10 = 2; $__10 < arguments.length; $__10++)
  1222. args[$__10 - 2] = arguments[$__10];
  1223. var object = create(functionObject.prototype);
  1224. setPrivate(object, observeName, observe);
  1225. return object;
  1226. }
  1227. function observeForEach(observe, next) {
  1228. return new Promise(function(resolve, reject) {
  1229. var generator = observe({
  1230. next: function(value) {
  1231. return next.call(generator, value);
  1232. },
  1233. throw: function(error) {
  1234. reject(error);
  1235. },
  1236. return: function(value) {
  1237. resolve(value);
  1238. }
  1239. });
  1240. });
  1241. }
  1242. function schedule(asyncF) {
  1243. return Promise.resolve().then(asyncF);
  1244. }
  1245. var generator = Symbol();
  1246. var onDone = Symbol();
  1247. var DecoratedGenerator = function() {
  1248. function DecoratedGenerator(_generator, _onDone) {
  1249. this[generator] = _generator;
  1250. this[onDone] = _onDone;
  1251. }
  1252. return ($traceurRuntime.createClass)(DecoratedGenerator, {
  1253. next: function(value) {
  1254. var result = this[generator].next(value);
  1255. if (result !== undefined && result.done) {
  1256. this[onDone].call(this);
  1257. }
  1258. return result;
  1259. },
  1260. throw: function(error) {
  1261. this[onDone].call(this);
  1262. return this[generator].throw(error);
  1263. },
  1264. return: function(value) {
  1265. this[onDone].call(this);
  1266. return this[generator].return(value);
  1267. }
  1268. }, {});
  1269. }();
  1270. function createDecoratedGenerator(generator, onDone) {
  1271. return new DecoratedGenerator(generator, onDone);
  1272. }
  1273. Array.prototype[Symbol.observer] = function(observer) {
  1274. var done = false;
  1275. var decoratedObserver = createDecoratedGenerator(observer, function() {
  1276. return done = true;
  1277. });
  1278. var $__6 = true;
  1279. var $__7 = false;
  1280. var $__8 = undefined;
  1281. try {
  1282. for (var $__4 = void 0,
  1283. $__3 = (this)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) {
  1284. var value = $__4.value;
  1285. {
  1286. decoratedObserver.next(value);
  1287. if (done) {
  1288. return;
  1289. }
  1290. }
  1291. }
  1292. } catch ($__9) {
  1293. $__7 = true;
  1294. $__8 = $__9;
  1295. } finally {
  1296. try {
  1297. if (!$__6 && $__3.return != null) {
  1298. $__3.return();
  1299. }
  1300. } finally {
  1301. if ($__7) {
  1302. throw $__8;
  1303. }
  1304. }
  1305. }
  1306. decoratedObserver.return();
  1307. return decoratedObserver;
  1308. };
  1309. defineProperty(Array.prototype, Symbol.observer, {enumerable: false});
  1310. return {
  1311. get initAsyncGeneratorFunction() {
  1312. return initAsyncGeneratorFunction;
  1313. },
  1314. get createAsyncGeneratorInstance() {
  1315. return createAsyncGeneratorInstance;
  1316. },
  1317. get observeForEach() {
  1318. return observeForEach;
  1319. },
  1320. get schedule() {
  1321. return schedule;
  1322. },
  1323. get createDecoratedGenerator() {
  1324. return createDecoratedGenerator;
  1325. }
  1326. };
  1327. });
  1328. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js", [], function() {
  1329. "use strict";
  1330. var __moduleName = "traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js";
  1331. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js"));
  1332. return {get default() {
  1333. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.initAsyncGeneratorFunction;
  1334. }};
  1335. });
  1336. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js", [], function() {
  1337. "use strict";
  1338. var __moduleName = "traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js";
  1339. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js"));
  1340. return {get default() {
  1341. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.createAsyncGeneratorInstance;
  1342. }};
  1343. });
  1344. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/observeForEach.js", [], function() {
  1345. "use strict";
  1346. var __moduleName = "traceur@0.0.112/src/runtime/modules/observeForEach.js";
  1347. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/observeForEach.js"));
  1348. return {get default() {
  1349. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.observeForEach;
  1350. }};
  1351. });
  1352. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/schedule.js", [], function() {
  1353. "use strict";
  1354. var __moduleName = "traceur@0.0.112/src/runtime/modules/schedule.js";
  1355. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/schedule.js"));
  1356. return {get default() {
  1357. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.schedule;
  1358. }};
  1359. });
  1360. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js", [], function() {
  1361. "use strict";
  1362. var __moduleName = "traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js";
  1363. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js"));
  1364. return {get default() {
  1365. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.createDecoratedGenerator;
  1366. }};
  1367. });
  1368. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/async.js", [], function() {
  1369. "use strict";
  1370. var __moduleName = "traceur@0.0.112/src/runtime/async.js";
  1371. var initAsyncGeneratorFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initAsyncGeneratorFunction.js", "traceur@0.0.112/src/runtime/async.js")).default;
  1372. var createAsyncGeneratorInstance = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createAsyncGeneratorInstance.js", "traceur@0.0.112/src/runtime/async.js")).default;
  1373. var observeForEach = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/observeForEach.js", "traceur@0.0.112/src/runtime/async.js")).default;
  1374. var schedule = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/schedule.js", "traceur@0.0.112/src/runtime/async.js")).default;
  1375. var createDecoratedGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createDecoratedGenerator.js", "traceur@0.0.112/src/runtime/async.js")).default;
  1376. $traceurRuntime.initAsyncGeneratorFunction = initAsyncGeneratorFunction;
  1377. $traceurRuntime.createAsyncGeneratorInstance = createAsyncGeneratorInstance;
  1378. $traceurRuntime.observeForEach = observeForEach;
  1379. $traceurRuntime.schedule = schedule;
  1380. $traceurRuntime.createDecoratedGenerator = createDecoratedGenerator;
  1381. return {};
  1382. });
  1383. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/generators.js", [], function() {
  1384. "use strict";
  1385. var __moduleName = "traceur@0.0.112/src/runtime/modules/generators.js";
  1386. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/generators.js")),
  1387. createPrivateSymbol = $__2.createPrivateSymbol,
  1388. getPrivate = $__2.getPrivate,
  1389. setPrivate = $__2.setPrivate;
  1390. var $TypeError = TypeError;
  1391. var $__1 = Object,
  1392. create = $__1.create,
  1393. defineProperties = $__1.defineProperties,
  1394. defineProperty = $__1.defineProperty;
  1395. function nonEnum(value) {
  1396. return {
  1397. configurable: true,
  1398. enumerable: false,
  1399. value: value,
  1400. writable: true
  1401. };
  1402. }
  1403. var ST_NEWBORN = 0;
  1404. var ST_EXECUTING = 1;
  1405. var ST_SUSPENDED = 2;
  1406. var ST_CLOSED = 3;
  1407. var END_STATE = -2;
  1408. var RETHROW_STATE = -3;
  1409. function getInternalError(state) {
  1410. return new Error('Traceur compiler bug: invalid state in state machine: ' + state);
  1411. }
  1412. var RETURN_SENTINEL = {};
  1413. function GeneratorContext() {
  1414. this.state = 0;
  1415. this.GState = ST_NEWBORN;
  1416. this.storedException = undefined;
  1417. this.finallyFallThrough = undefined;
  1418. this.sent_ = undefined;
  1419. this.returnValue = undefined;
  1420. this.oldReturnValue = undefined;
  1421. this.tryStack_ = [];
  1422. }
  1423. GeneratorContext.prototype = {
  1424. pushTry: function(catchState, finallyState) {
  1425. if (finallyState !== null) {
  1426. var finallyFallThrough = null;
  1427. for (var i = this.tryStack_.length - 1; i >= 0; i--) {
  1428. if (this.tryStack_[i].catch !== undefined) {
  1429. finallyFallThrough = this.tryStack_[i].catch;
  1430. break;
  1431. }
  1432. }
  1433. if (finallyFallThrough === null)
  1434. finallyFallThrough = RETHROW_STATE;
  1435. this.tryStack_.push({
  1436. finally: finallyState,
  1437. finallyFallThrough: finallyFallThrough
  1438. });
  1439. }
  1440. if (catchState !== null) {
  1441. this.tryStack_.push({catch: catchState});
  1442. }
  1443. },
  1444. popTry: function() {
  1445. this.tryStack_.pop();
  1446. },
  1447. maybeUncatchable: function() {
  1448. if (this.storedException === RETURN_SENTINEL) {
  1449. throw RETURN_SENTINEL;
  1450. }
  1451. },
  1452. get sent() {
  1453. this.maybeThrow();
  1454. return this.sent_;
  1455. },
  1456. set sent(v) {
  1457. this.sent_ = v;
  1458. },
  1459. get sentIgnoreThrow() {
  1460. return this.sent_;
  1461. },
  1462. maybeThrow: function() {
  1463. if (this.action === 'throw') {
  1464. this.action = 'next';
  1465. throw this.sent_;
  1466. }
  1467. },
  1468. end: function() {
  1469. switch (this.state) {
  1470. case END_STATE:
  1471. return this;
  1472. case RETHROW_STATE:
  1473. throw this.storedException;
  1474. default:
  1475. throw getInternalError(this.state);
  1476. }
  1477. },
  1478. handleException: function(ex) {
  1479. this.GState = ST_CLOSED;
  1480. this.state = END_STATE;
  1481. throw ex;
  1482. },
  1483. wrapYieldStar: function(iterator) {
  1484. var ctx = this;
  1485. return {
  1486. next: function(v) {
  1487. return iterator.next(v);
  1488. },
  1489. throw: function(e) {
  1490. var result;
  1491. if (e === RETURN_SENTINEL) {
  1492. if (iterator.return) {
  1493. result = iterator.return(ctx.returnValue);
  1494. if (!result.done) {
  1495. ctx.returnValue = ctx.oldReturnValue;
  1496. return result;
  1497. }
  1498. ctx.returnValue = result.value;
  1499. }
  1500. throw e;
  1501. }
  1502. if (iterator.throw) {
  1503. return iterator.throw(e);
  1504. }
  1505. iterator.return && iterator.return();
  1506. throw $TypeError('Inner iterator does not have a throw method');
  1507. }
  1508. };
  1509. }
  1510. };
  1511. function nextOrThrow(ctx, moveNext, action, x) {
  1512. switch (ctx.GState) {
  1513. case ST_EXECUTING:
  1514. throw new Error(("\"" + action + "\" on executing generator"));
  1515. case ST_CLOSED:
  1516. if (action == 'next') {
  1517. return {
  1518. value: undefined,
  1519. done: true
  1520. };
  1521. }
  1522. if (x === RETURN_SENTINEL) {
  1523. return {
  1524. value: ctx.returnValue,
  1525. done: true
  1526. };
  1527. }
  1528. throw x;
  1529. case ST_NEWBORN:
  1530. if (action === 'throw') {
  1531. ctx.GState = ST_CLOSED;
  1532. if (x === RETURN_SENTINEL) {
  1533. return {
  1534. value: ctx.returnValue,
  1535. done: true
  1536. };
  1537. }
  1538. throw x;
  1539. }
  1540. if (x !== undefined)
  1541. throw $TypeError('Sent value to newborn generator');
  1542. case ST_SUSPENDED:
  1543. ctx.GState = ST_EXECUTING;
  1544. ctx.action = action;
  1545. ctx.sent = x;
  1546. var value;
  1547. try {
  1548. value = moveNext(ctx);
  1549. } catch (ex) {
  1550. if (ex === RETURN_SENTINEL) {
  1551. value = ctx;
  1552. } else {
  1553. throw ex;
  1554. }
  1555. }
  1556. var done = value === ctx;
  1557. if (done)
  1558. value = ctx.returnValue;
  1559. ctx.GState = done ? ST_CLOSED : ST_SUSPENDED;
  1560. return {
  1561. value: value,
  1562. done: done
  1563. };
  1564. }
  1565. }
  1566. var ctxName = createPrivateSymbol();
  1567. var moveNextName = createPrivateSymbol();
  1568. function GeneratorFunction() {}
  1569. function GeneratorFunctionPrototype() {}
  1570. GeneratorFunction.prototype = GeneratorFunctionPrototype;
  1571. defineProperty(GeneratorFunctionPrototype, 'constructor', nonEnum(GeneratorFunction));
  1572. GeneratorFunctionPrototype.prototype = {
  1573. constructor: GeneratorFunctionPrototype,
  1574. next: function(v) {
  1575. return nextOrThrow(getPrivate(this, ctxName), getPrivate(this, moveNextName), 'next', v);
  1576. },
  1577. throw: function(v) {
  1578. return nextOrThrow(getPrivate(this, ctxName), getPrivate(this, moveNextName), 'throw', v);
  1579. },
  1580. return: function(v) {
  1581. var ctx = getPrivate(this, ctxName);
  1582. ctx.oldReturnValue = ctx.returnValue;
  1583. ctx.returnValue = v;
  1584. return nextOrThrow(ctx, getPrivate(this, moveNextName), 'throw', RETURN_SENTINEL);
  1585. }
  1586. };
  1587. defineProperties(GeneratorFunctionPrototype.prototype, {
  1588. constructor: {enumerable: false},
  1589. next: {enumerable: false},
  1590. throw: {enumerable: false},
  1591. return: {enumerable: false}
  1592. });
  1593. Object.defineProperty(GeneratorFunctionPrototype.prototype, Symbol.iterator, nonEnum(function() {
  1594. return this;
  1595. }));
  1596. function createGeneratorInstance(innerFunction, functionObject, self) {
  1597. var moveNext = getMoveNext(innerFunction, self);
  1598. var ctx = new GeneratorContext();
  1599. var object = create(functionObject.prototype);
  1600. setPrivate(object, ctxName, ctx);
  1601. setPrivate(object, moveNextName, moveNext);
  1602. return object;
  1603. }
  1604. function initGeneratorFunction(functionObject) {
  1605. functionObject.prototype = create(GeneratorFunctionPrototype.prototype);
  1606. functionObject.__proto__ = GeneratorFunctionPrototype;
  1607. return functionObject;
  1608. }
  1609. function AsyncFunctionContext() {
  1610. GeneratorContext.call(this);
  1611. this.err = undefined;
  1612. var ctx = this;
  1613. ctx.result = new Promise(function(resolve, reject) {
  1614. ctx.resolve = resolve;
  1615. ctx.reject = reject;
  1616. });
  1617. }
  1618. AsyncFunctionContext.prototype = create(GeneratorContext.prototype);
  1619. AsyncFunctionContext.prototype.end = function() {
  1620. switch (this.state) {
  1621. case END_STATE:
  1622. this.resolve(this.returnValue);
  1623. break;
  1624. case RETHROW_STATE:
  1625. this.reject(this.storedException);
  1626. break;
  1627. default:
  1628. this.reject(getInternalError(this.state));
  1629. }
  1630. };
  1631. AsyncFunctionContext.prototype.handleException = function() {
  1632. this.state = RETHROW_STATE;
  1633. };
  1634. function asyncWrap(innerFunction, self) {
  1635. var moveNext = getMoveNext(innerFunction, self);
  1636. var ctx = new AsyncFunctionContext();
  1637. ctx.createCallback = function(newState) {
  1638. return function(value) {
  1639. ctx.state = newState;
  1640. ctx.value = value;
  1641. moveNext(ctx);
  1642. };
  1643. };
  1644. ctx.errback = function(err) {
  1645. handleCatch(ctx, err);
  1646. moveNext(ctx);
  1647. };
  1648. moveNext(ctx);
  1649. return ctx.result;
  1650. }
  1651. function getMoveNext(innerFunction, self) {
  1652. return function(ctx) {
  1653. while (true) {
  1654. try {
  1655. return innerFunction.call(self, ctx);
  1656. } catch (ex) {
  1657. handleCatch(ctx, ex);
  1658. }
  1659. }
  1660. };
  1661. }
  1662. function handleCatch(ctx, ex) {
  1663. ctx.storedException = ex;
  1664. var last = ctx.tryStack_[ctx.tryStack_.length - 1];
  1665. if (!last) {
  1666. ctx.handleException(ex);
  1667. return;
  1668. }
  1669. ctx.state = last.catch !== undefined ? last.catch : last.finally;
  1670. if (last.finallyFallThrough !== undefined)
  1671. ctx.finallyFallThrough = last.finallyFallThrough;
  1672. }
  1673. return {
  1674. get createGeneratorInstance() {
  1675. return createGeneratorInstance;
  1676. },
  1677. get initGeneratorFunction() {
  1678. return initGeneratorFunction;
  1679. },
  1680. get asyncWrap() {
  1681. return asyncWrap;
  1682. }
  1683. };
  1684. });
  1685. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/asyncWrap.js", [], function() {
  1686. "use strict";
  1687. var __moduleName = "traceur@0.0.112/src/runtime/modules/asyncWrap.js";
  1688. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/asyncWrap.js"));
  1689. return {get default() {
  1690. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.asyncWrap;
  1691. }};
  1692. });
  1693. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js", [], function() {
  1694. "use strict";
  1695. var __moduleName = "traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js";
  1696. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js"));
  1697. return {get default() {
  1698. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.initGeneratorFunction;
  1699. }};
  1700. });
  1701. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js", [], function() {
  1702. "use strict";
  1703. var __moduleName = "traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js";
  1704. var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js"));
  1705. return {get default() {
  1706. return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.createGeneratorInstance;
  1707. }};
  1708. });
  1709. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/generators.js", [], function() {
  1710. "use strict";
  1711. var __moduleName = "traceur@0.0.112/src/runtime/generators.js";
  1712. var asyncWrap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/asyncWrap.js", "traceur@0.0.112/src/runtime/generators.js")).default;
  1713. var initGeneratorFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initGeneratorFunction.js", "traceur@0.0.112/src/runtime/generators.js")).default;
  1714. var createGeneratorInstance = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createGeneratorInstance.js", "traceur@0.0.112/src/runtime/generators.js")).default;
  1715. $traceurRuntime.asyncWrap = asyncWrap;
  1716. $traceurRuntime.initGeneratorFunction = initGeneratorFunction;
  1717. $traceurRuntime.createGeneratorInstance = createGeneratorInstance;
  1718. return {};
  1719. });
  1720. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spawn.js", [], function() {
  1721. "use strict";
  1722. var __moduleName = "traceur@0.0.112/src/runtime/modules/spawn.js";
  1723. function spawn(self, args, gen) {
  1724. return new Promise(function(resolve, reject) {
  1725. function fulfill(v) {
  1726. try {
  1727. step(gen.next(v));
  1728. } catch (e) {
  1729. reject(e);
  1730. }
  1731. }
  1732. function rejected(v) {
  1733. try {
  1734. step(gen.throw(v));
  1735. } catch (e) {
  1736. reject(e);
  1737. }
  1738. }
  1739. function step(res) {
  1740. if (res.done) {
  1741. resolve(res.value);
  1742. } else {
  1743. Promise.resolve(res.value).then(fulfill, rejected);
  1744. }
  1745. }
  1746. step((gen = gen.apply(self, args)).next());
  1747. });
  1748. }
  1749. return {get default() {
  1750. return spawn;
  1751. }};
  1752. });
  1753. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/spawn.js", [], function() {
  1754. "use strict";
  1755. var __moduleName = "traceur@0.0.112/src/runtime/spawn.js";
  1756. var spawn = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spawn.js", "traceur@0.0.112/src/runtime/spawn.js")).default;
  1757. $traceurRuntime.spawn = spawn;
  1758. return {};
  1759. });
  1760. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/getTemplateObject.js", [], function() {
  1761. "use strict";
  1762. var __moduleName = "traceur@0.0.112/src/runtime/modules/getTemplateObject.js";
  1763. var $__1 = Object,
  1764. defineProperty = $__1.defineProperty,
  1765. freeze = $__1.freeze;
  1766. var slice = Array.prototype.slice;
  1767. var map = Object.create(null);
  1768. function getTemplateObject(raw) {
  1769. var cooked = arguments[1];
  1770. var key = raw.join('${}');
  1771. var templateObject = map[key];
  1772. if (templateObject)
  1773. return templateObject;
  1774. if (!cooked) {
  1775. cooked = slice.call(raw);
  1776. }
  1777. return map[key] = freeze(defineProperty(cooked, 'raw', {value: freeze(raw)}));
  1778. }
  1779. return {get default() {
  1780. return getTemplateObject;
  1781. }};
  1782. });
  1783. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/template.js", [], function() {
  1784. "use strict";
  1785. var __moduleName = "traceur@0.0.112/src/runtime/template.js";
  1786. var getTemplateObject = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/getTemplateObject.js", "traceur@0.0.112/src/runtime/template.js")).default;
  1787. $traceurRuntime.getTemplateObject = getTemplateObject;
  1788. return {};
  1789. });
  1790. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spreadProperties.js", [], function() {
  1791. "use strict";
  1792. var __moduleName = "traceur@0.0.112/src/runtime/modules/spreadProperties.js";
  1793. var $__1 = Object,
  1794. defineProperty = $__1.defineProperty,
  1795. getOwnPropertyNames = $__1.getOwnPropertyNames,
  1796. getOwnPropertySymbols = $__1.getOwnPropertySymbols,
  1797. propertyIsEnumerable = $__1.propertyIsEnumerable;
  1798. function createDataProperty(o, p, v) {
  1799. defineProperty(o, p, {
  1800. configurable: true,
  1801. enumerable: true,
  1802. value: v,
  1803. writable: true
  1804. });
  1805. }
  1806. function copyDataProperties(target, source) {
  1807. if (source == null) {
  1808. return;
  1809. }
  1810. var copy = function(keys) {
  1811. for (var i = 0; i < keys.length; i++) {
  1812. var nextKey = keys[i];
  1813. if (propertyIsEnumerable.call(source, nextKey)) {
  1814. var propValue = source[nextKey];
  1815. createDataProperty(target, nextKey, propValue);
  1816. }
  1817. }
  1818. };
  1819. copy(getOwnPropertyNames(source));
  1820. copy(getOwnPropertySymbols(source));
  1821. }
  1822. var $__default = function() {
  1823. var target = arguments[0];
  1824. for (var i = 1; i < arguments.length; i++) {
  1825. copyDataProperties(target, arguments[i]);
  1826. }
  1827. return target;
  1828. };
  1829. return {get default() {
  1830. return $__default;
  1831. }};
  1832. });
  1833. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/jsx.js", [], function() {
  1834. "use strict";
  1835. var __moduleName = "traceur@0.0.112/src/runtime/jsx.js";
  1836. var spreadProperties = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spreadProperties.js", "traceur@0.0.112/src/runtime/jsx.js")).default;
  1837. $traceurRuntime.spreadProperties = spreadProperties;
  1838. return {};
  1839. });
  1840. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/runtime-modules.js", [], function() {
  1841. "use strict";
  1842. var __moduleName = "traceur@0.0.112/src/runtime/runtime-modules.js";
  1843. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./symbols.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1844. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./classes.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1845. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./exportStar.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1846. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1847. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./relativeRequire.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1848. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./spread.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1849. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./destructuring.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1850. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1851. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1852. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./spawn.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1853. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./template.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1854. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./jsx.js", "traceur@0.0.112/src/runtime/runtime-modules.js"));
  1855. return {};
  1856. });
  1857. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/runtime-modules.js" + '');
  1858. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/frozen-data.js", [], function() {
  1859. "use strict";
  1860. var __moduleName = "traceur@0.0.112/src/runtime/frozen-data.js";
  1861. function findIndex(arr, key) {
  1862. for (var i = 0; i < arr.length; i += 2) {
  1863. if (arr[i] === key) {
  1864. return i;
  1865. }
  1866. }
  1867. return -1;
  1868. }
  1869. function setFrozen(arr, key, val) {
  1870. var i = findIndex(arr, key);
  1871. if (i === -1) {
  1872. arr.push(key, val);
  1873. }
  1874. }
  1875. function getFrozen(arr, key) {
  1876. var i = findIndex(arr, key);
  1877. if (i !== -1) {
  1878. return arr[i + 1];
  1879. }
  1880. return undefined;
  1881. }
  1882. function hasFrozen(arr, key) {
  1883. return findIndex(arr, key) !== -1;
  1884. }
  1885. function deleteFrozen(arr, key) {
  1886. var i = findIndex(arr, key);
  1887. if (i !== -1) {
  1888. arr.splice(i, 2);
  1889. return true;
  1890. }
  1891. return false;
  1892. }
  1893. return {
  1894. get setFrozen() {
  1895. return setFrozen;
  1896. },
  1897. get getFrozen() {
  1898. return getFrozen;
  1899. },
  1900. get hasFrozen() {
  1901. return hasFrozen;
  1902. },
  1903. get deleteFrozen() {
  1904. return deleteFrozen;
  1905. }
  1906. };
  1907. });
  1908. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/utils.js", [], function() {
  1909. "use strict";
  1910. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/utils.js";
  1911. var $ceil = Math.ceil;
  1912. var $floor = Math.floor;
  1913. var $isFinite = isFinite;
  1914. var $isNaN = isNaN;
  1915. var $pow = Math.pow;
  1916. var $min = Math.min;
  1917. var $TypeError = TypeError;
  1918. var $Object = Object;
  1919. function toObject(x) {
  1920. if (x == null) {
  1921. throw $TypeError();
  1922. }
  1923. return $Object(x);
  1924. }
  1925. function toUint32(x) {
  1926. return x >>> 0;
  1927. }
  1928. function isObject(x) {
  1929. return x && (typeof x === 'object' || typeof x === 'function');
  1930. }
  1931. function isCallable(x) {
  1932. return typeof x === 'function';
  1933. }
  1934. function isNumber(x) {
  1935. return typeof x === 'number';
  1936. }
  1937. function toInteger(x) {
  1938. x = +x;
  1939. if ($isNaN(x))
  1940. return 0;
  1941. if (x === 0 || !$isFinite(x))
  1942. return x;
  1943. return x > 0 ? $floor(x) : $ceil(x);
  1944. }
  1945. var MAX_SAFE_LENGTH = $pow(2, 53) - 1;
  1946. function toLength(x) {
  1947. var len = toInteger(x);
  1948. return len < 0 ? 0 : $min(len, MAX_SAFE_LENGTH);
  1949. }
  1950. function checkIterable(x) {
  1951. return !isObject(x) ? undefined : x[Symbol.iterator];
  1952. }
  1953. function isConstructor(x) {
  1954. return isCallable(x);
  1955. }
  1956. function createIteratorResultObject(value, done) {
  1957. return {
  1958. value: value,
  1959. done: done
  1960. };
  1961. }
  1962. function maybeDefine(object, name, descr) {
  1963. if (!(name in object)) {
  1964. Object.defineProperty(object, name, descr);
  1965. }
  1966. }
  1967. function maybeDefineMethod(object, name, value) {
  1968. maybeDefine(object, name, {
  1969. value: value,
  1970. configurable: true,
  1971. enumerable: false,
  1972. writable: true
  1973. });
  1974. }
  1975. function maybeDefineConst(object, name, value) {
  1976. maybeDefine(object, name, {
  1977. value: value,
  1978. configurable: false,
  1979. enumerable: false,
  1980. writable: false
  1981. });
  1982. }
  1983. function maybeAddFunctions(object, functions) {
  1984. for (var i = 0; i < functions.length; i += 2) {
  1985. var name = functions[i];
  1986. var value = functions[i + 1];
  1987. maybeDefineMethod(object, name, value);
  1988. }
  1989. }
  1990. function maybeAddConsts(object, consts) {
  1991. for (var i = 0; i < consts.length; i += 2) {
  1992. var name = consts[i];
  1993. var value = consts[i + 1];
  1994. maybeDefineConst(object, name, value);
  1995. }
  1996. }
  1997. function maybeAddIterator(object, func, Symbol) {
  1998. if (!Symbol || !Symbol.iterator || object[Symbol.iterator])
  1999. return;
  2000. if (object['@@iterator'])
  2001. func = object['@@iterator'];
  2002. Object.defineProperty(object, Symbol.iterator, {
  2003. value: func,
  2004. configurable: true,
  2005. enumerable: false,
  2006. writable: true
  2007. });
  2008. }
  2009. var polyfills = [];
  2010. function registerPolyfill(func) {
  2011. polyfills.push(func);
  2012. }
  2013. function polyfillAll(global) {
  2014. polyfills.forEach(function(f) {
  2015. return f(global);
  2016. });
  2017. }
  2018. return {
  2019. get toObject() {
  2020. return toObject;
  2021. },
  2022. get toUint32() {
  2023. return toUint32;
  2024. },
  2025. get isObject() {
  2026. return isObject;
  2027. },
  2028. get isCallable() {
  2029. return isCallable;
  2030. },
  2031. get isNumber() {
  2032. return isNumber;
  2033. },
  2034. get toInteger() {
  2035. return toInteger;
  2036. },
  2037. get toLength() {
  2038. return toLength;
  2039. },
  2040. get checkIterable() {
  2041. return checkIterable;
  2042. },
  2043. get isConstructor() {
  2044. return isConstructor;
  2045. },
  2046. get createIteratorResultObject() {
  2047. return createIteratorResultObject;
  2048. },
  2049. get maybeDefine() {
  2050. return maybeDefine;
  2051. },
  2052. get maybeDefineMethod() {
  2053. return maybeDefineMethod;
  2054. },
  2055. get maybeDefineConst() {
  2056. return maybeDefineConst;
  2057. },
  2058. get maybeAddFunctions() {
  2059. return maybeAddFunctions;
  2060. },
  2061. get maybeAddConsts() {
  2062. return maybeAddConsts;
  2063. },
  2064. get maybeAddIterator() {
  2065. return maybeAddIterator;
  2066. },
  2067. get registerPolyfill() {
  2068. return registerPolyfill;
  2069. },
  2070. get polyfillAll() {
  2071. return polyfillAll;
  2072. }
  2073. };
  2074. });
  2075. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Map.js", [], function() {
  2076. "use strict";
  2077. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Map.js";
  2078. var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")),
  2079. createPrivateSymbol = $__16.createPrivateSymbol,
  2080. getPrivate = $__16.getPrivate,
  2081. setPrivate = $__16.setPrivate;
  2082. var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")),
  2083. deleteFrozen = $__17.deleteFrozen,
  2084. getFrozen = $__17.getFrozen,
  2085. setFrozen = $__17.setFrozen;
  2086. var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")),
  2087. isObject = $__18.isObject,
  2088. registerPolyfill = $__18.registerPolyfill;
  2089. var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")).default;
  2090. var $__9 = Object,
  2091. defineProperty = $__9.defineProperty,
  2092. getOwnPropertyDescriptor = $__9.getOwnPropertyDescriptor,
  2093. hasOwnProperty = $__9.hasOwnProperty,
  2094. isExtensible = $__9.isExtensible;
  2095. var deletedSentinel = {};
  2096. var counter = 1;
  2097. var hashCodeName = createPrivateSymbol();
  2098. function getHashCodeForObject(obj) {
  2099. return getPrivate(obj, hashCodeName);
  2100. }
  2101. function getOrSetHashCodeForObject(obj) {
  2102. var hash = getHashCodeForObject(obj);
  2103. if (!hash) {
  2104. hash = counter++;
  2105. setPrivate(obj, hashCodeName, hash);
  2106. }
  2107. return hash;
  2108. }
  2109. function lookupIndex(map, key) {
  2110. if (typeof key === 'string') {
  2111. return map.stringIndex_[key];
  2112. }
  2113. if (isObject(key)) {
  2114. if (!isExtensible(key)) {
  2115. return getFrozen(map.frozenData_, key);
  2116. }
  2117. var hc = getHashCodeForObject(key);
  2118. if (hc === undefined) {
  2119. return undefined;
  2120. }
  2121. return map.objectIndex_[hc];
  2122. }
  2123. return map.primitiveIndex_[key];
  2124. }
  2125. function initMap(map) {
  2126. map.entries_ = [];
  2127. map.objectIndex_ = Object.create(null);
  2128. map.stringIndex_ = Object.create(null);
  2129. map.primitiveIndex_ = Object.create(null);
  2130. map.frozenData_ = [];
  2131. map.deletedCount_ = 0;
  2132. }
  2133. var Map = function() {
  2134. function Map() {
  2135. var $__11,
  2136. $__12;
  2137. var iterable = arguments[0];
  2138. if (!isObject(this))
  2139. throw new TypeError('Map called on incompatible type');
  2140. if (hasOwnProperty.call(this, 'entries_')) {
  2141. throw new TypeError('Map can not be reentrantly initialised');
  2142. }
  2143. initMap(this);
  2144. if (iterable !== null && iterable !== undefined) {
  2145. var $__5 = true;
  2146. var $__6 = false;
  2147. var $__7 = undefined;
  2148. try {
  2149. for (var $__3 = void 0,
  2150. $__2 = (iterable)[Symbol.iterator](); !($__5 = ($__3 = $__2.next()).done); $__5 = true) {
  2151. var $__10 = $__3.value,
  2152. key = ($__11 = $__10[Symbol.iterator](), ($__12 = $__11.next()).done ? void 0 : $__12.value),
  2153. value = ($__12 = $__11.next()).done ? void 0 : $__12.value;
  2154. {
  2155. this.set(key, value);
  2156. }
  2157. }
  2158. } catch ($__8) {
  2159. $__6 = true;
  2160. $__7 = $__8;
  2161. } finally {
  2162. try {
  2163. if (!$__5 && $__2.return != null) {
  2164. $__2.return();
  2165. }
  2166. } finally {
  2167. if ($__6) {
  2168. throw $__7;
  2169. }
  2170. }
  2171. }
  2172. }
  2173. }
  2174. return ($traceurRuntime.createClass)(Map, {
  2175. get size() {
  2176. return this.entries_.length / 2 - this.deletedCount_;
  2177. },
  2178. get: function(key) {
  2179. var index = lookupIndex(this, key);
  2180. if (index !== undefined) {
  2181. return this.entries_[index + 1];
  2182. }
  2183. },
  2184. set: function(key, value) {
  2185. var index = lookupIndex(this, key);
  2186. if (index !== undefined) {
  2187. this.entries_[index + 1] = value;
  2188. } else {
  2189. index = this.entries_.length;
  2190. this.entries_[index] = key;
  2191. this.entries_[index + 1] = value;
  2192. if (isObject(key)) {
  2193. if (!isExtensible(key)) {
  2194. setFrozen(this.frozenData_, key, index);
  2195. } else {
  2196. var hash = getOrSetHashCodeForObject(key);
  2197. this.objectIndex_[hash] = index;
  2198. }
  2199. } else if (typeof key === 'string') {
  2200. this.stringIndex_[key] = index;
  2201. } else {
  2202. this.primitiveIndex_[key] = index;
  2203. }
  2204. }
  2205. return this;
  2206. },
  2207. has: function(key) {
  2208. return lookupIndex(this, key) !== undefined;
  2209. },
  2210. delete: function(key) {
  2211. var index = lookupIndex(this, key);
  2212. if (index === undefined) {
  2213. return false;
  2214. }
  2215. this.entries_[index] = deletedSentinel;
  2216. this.entries_[index + 1] = undefined;
  2217. this.deletedCount_++;
  2218. if (isObject(key)) {
  2219. if (!isExtensible(key)) {
  2220. deleteFrozen(this.frozenData_, key);
  2221. } else {
  2222. var hash = getHashCodeForObject(key);
  2223. delete this.objectIndex_[hash];
  2224. }
  2225. } else if (typeof key === 'string') {
  2226. delete this.stringIndex_[key];
  2227. } else {
  2228. delete this.primitiveIndex_[key];
  2229. }
  2230. return true;
  2231. },
  2232. clear: function() {
  2233. initMap(this);
  2234. },
  2235. forEach: function(callbackFn) {
  2236. var thisArg = arguments[1];
  2237. for (var i = 0; i < this.entries_.length; i += 2) {
  2238. var key = this.entries_[i];
  2239. var value = this.entries_[i + 1];
  2240. if (key === deletedSentinel)
  2241. continue;
  2242. callbackFn.call(thisArg, value, key, this);
  2243. }
  2244. },
  2245. entries: $traceurRuntime.initGeneratorFunction(function $__13() {
  2246. var i,
  2247. key,
  2248. value;
  2249. return $traceurRuntime.createGeneratorInstance(function($ctx) {
  2250. while (true)
  2251. switch ($ctx.state) {
  2252. case 0:
  2253. i = 0;
  2254. $ctx.state = 12;
  2255. break;
  2256. case 12:
  2257. $ctx.state = (i < this.entries_.length) ? 8 : -2;
  2258. break;
  2259. case 4:
  2260. i += 2;
  2261. $ctx.state = 12;
  2262. break;
  2263. case 8:
  2264. key = this.entries_[i];
  2265. value = this.entries_[i + 1];
  2266. $ctx.state = 9;
  2267. break;
  2268. case 9:
  2269. $ctx.state = (key === deletedSentinel) ? 4 : 6;
  2270. break;
  2271. case 6:
  2272. $ctx.state = 2;
  2273. return [key, value];
  2274. case 2:
  2275. $ctx.maybeThrow();
  2276. $ctx.state = 4;
  2277. break;
  2278. default:
  2279. return $ctx.end();
  2280. }
  2281. }, $__13, this);
  2282. }),
  2283. keys: $traceurRuntime.initGeneratorFunction(function $__14() {
  2284. var i,
  2285. key,
  2286. value;
  2287. return $traceurRuntime.createGeneratorInstance(function($ctx) {
  2288. while (true)
  2289. switch ($ctx.state) {
  2290. case 0:
  2291. i = 0;
  2292. $ctx.state = 12;
  2293. break;
  2294. case 12:
  2295. $ctx.state = (i < this.entries_.length) ? 8 : -2;
  2296. break;
  2297. case 4:
  2298. i += 2;
  2299. $ctx.state = 12;
  2300. break;
  2301. case 8:
  2302. key = this.entries_[i];
  2303. value = this.entries_[i + 1];
  2304. $ctx.state = 9;
  2305. break;
  2306. case 9:
  2307. $ctx.state = (key === deletedSentinel) ? 4 : 6;
  2308. break;
  2309. case 6:
  2310. $ctx.state = 2;
  2311. return key;
  2312. case 2:
  2313. $ctx.maybeThrow();
  2314. $ctx.state = 4;
  2315. break;
  2316. default:
  2317. return $ctx.end();
  2318. }
  2319. }, $__14, this);
  2320. }),
  2321. values: $traceurRuntime.initGeneratorFunction(function $__15() {
  2322. var i,
  2323. key,
  2324. value;
  2325. return $traceurRuntime.createGeneratorInstance(function($ctx) {
  2326. while (true)
  2327. switch ($ctx.state) {
  2328. case 0:
  2329. i = 0;
  2330. $ctx.state = 12;
  2331. break;
  2332. case 12:
  2333. $ctx.state = (i < this.entries_.length) ? 8 : -2;
  2334. break;
  2335. case 4:
  2336. i += 2;
  2337. $ctx.state = 12;
  2338. break;
  2339. case 8:
  2340. key = this.entries_[i];
  2341. value = this.entries_[i + 1];
  2342. $ctx.state = 9;
  2343. break;
  2344. case 9:
  2345. $ctx.state = (key === deletedSentinel) ? 4 : 6;
  2346. break;
  2347. case 6:
  2348. $ctx.state = 2;
  2349. return value;
  2350. case 2:
  2351. $ctx.maybeThrow();
  2352. $ctx.state = 4;
  2353. break;
  2354. default:
  2355. return $ctx.end();
  2356. }
  2357. }, $__15, this);
  2358. })
  2359. }, {});
  2360. }();
  2361. defineProperty(Map.prototype, Symbol.iterator, {
  2362. configurable: true,
  2363. writable: true,
  2364. value: Map.prototype.entries
  2365. });
  2366. function needsPolyfill(global) {
  2367. var $__10 = global,
  2368. Map = $__10.Map,
  2369. Symbol = $__10.Symbol;
  2370. if (!Map || !hasNativeSymbol() || !Map.prototype[Symbol.iterator] || !Map.prototype.entries) {
  2371. return true;
  2372. }
  2373. try {
  2374. return new Map([[]]).size !== 1;
  2375. } catch (e) {
  2376. return false;
  2377. }
  2378. }
  2379. function polyfillMap(global) {
  2380. if (needsPolyfill(global)) {
  2381. global.Map = Map;
  2382. }
  2383. }
  2384. registerPolyfill(polyfillMap);
  2385. return {
  2386. get Map() {
  2387. return Map;
  2388. },
  2389. get polyfillMap() {
  2390. return polyfillMap;
  2391. }
  2392. };
  2393. });
  2394. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Map.js" + '');
  2395. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Set.js", [], function() {
  2396. "use strict";
  2397. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Set.js";
  2398. var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")),
  2399. isObject = $__18.isObject,
  2400. registerPolyfill = $__18.registerPolyfill;
  2401. var Map = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Map.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")).Map;
  2402. var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")).default;
  2403. var hasOwnProperty = Object.prototype.hasOwnProperty;
  2404. var Set = function() {
  2405. function Set() {
  2406. var iterable = arguments[0];
  2407. if (!isObject(this))
  2408. throw new TypeError('Set called on incompatible type');
  2409. if (hasOwnProperty.call(this, 'map_')) {
  2410. throw new TypeError('Set can not be reentrantly initialised');
  2411. }
  2412. this.map_ = new Map();
  2413. if (iterable !== null && iterable !== undefined) {
  2414. var $__6 = true;
  2415. var $__7 = false;
  2416. var $__8 = undefined;
  2417. try {
  2418. for (var $__4 = void 0,
  2419. $__3 = (iterable)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) {
  2420. var item = $__4.value;
  2421. {
  2422. this.add(item);
  2423. }
  2424. }
  2425. } catch ($__9) {
  2426. $__7 = true;
  2427. $__8 = $__9;
  2428. } finally {
  2429. try {
  2430. if (!$__6 && $__3.return != null) {
  2431. $__3.return();
  2432. }
  2433. } finally {
  2434. if ($__7) {
  2435. throw $__8;
  2436. }
  2437. }
  2438. }
  2439. }
  2440. }
  2441. return ($traceurRuntime.createClass)(Set, {
  2442. get size() {
  2443. return this.map_.size;
  2444. },
  2445. has: function(key) {
  2446. return this.map_.has(key);
  2447. },
  2448. add: function(key) {
  2449. this.map_.set(key, key);
  2450. return this;
  2451. },
  2452. delete: function(key) {
  2453. return this.map_.delete(key);
  2454. },
  2455. clear: function() {
  2456. return this.map_.clear();
  2457. },
  2458. forEach: function(callbackFn) {
  2459. var thisArg = arguments[1];
  2460. var $__2 = this;
  2461. return this.map_.forEach(function(value, key) {
  2462. callbackFn.call(thisArg, key, key, $__2);
  2463. });
  2464. },
  2465. values: $traceurRuntime.initGeneratorFunction(function $__12() {
  2466. var $__13,
  2467. $__14;
  2468. return $traceurRuntime.createGeneratorInstance(function($ctx) {
  2469. while (true)
  2470. switch ($ctx.state) {
  2471. case 0:
  2472. $__13 = $ctx.wrapYieldStar(this.map_.keys()[Symbol.iterator]());
  2473. $ctx.sent = void 0;
  2474. $ctx.action = 'next';
  2475. $ctx.state = 12;
  2476. break;
  2477. case 12:
  2478. $__14 = $__13[$ctx.action]($ctx.sentIgnoreThrow);
  2479. $ctx.state = 9;
  2480. break;
  2481. case 9:
  2482. $ctx.state = ($__14.done) ? 3 : 2;
  2483. break;
  2484. case 3:
  2485. $ctx.sent = $__14.value;
  2486. $ctx.state = -2;
  2487. break;
  2488. case 2:
  2489. $ctx.state = 12;
  2490. return $__14.value;
  2491. default:
  2492. return $ctx.end();
  2493. }
  2494. }, $__12, this);
  2495. }),
  2496. entries: $traceurRuntime.initGeneratorFunction(function $__15() {
  2497. var $__16,
  2498. $__17;
  2499. return $traceurRuntime.createGeneratorInstance(function($ctx) {
  2500. while (true)
  2501. switch ($ctx.state) {
  2502. case 0:
  2503. $__16 = $ctx.wrapYieldStar(this.map_.entries()[Symbol.iterator]());
  2504. $ctx.sent = void 0;
  2505. $ctx.action = 'next';
  2506. $ctx.state = 12;
  2507. break;
  2508. case 12:
  2509. $__17 = $__16[$ctx.action]($ctx.sentIgnoreThrow);
  2510. $ctx.state = 9;
  2511. break;
  2512. case 9:
  2513. $ctx.state = ($__17.done) ? 3 : 2;
  2514. break;
  2515. case 3:
  2516. $ctx.sent = $__17.value;
  2517. $ctx.state = -2;
  2518. break;
  2519. case 2:
  2520. $ctx.state = 12;
  2521. return $__17.value;
  2522. default:
  2523. return $ctx.end();
  2524. }
  2525. }, $__15, this);
  2526. })
  2527. }, {});
  2528. }();
  2529. Object.defineProperty(Set.prototype, Symbol.iterator, {
  2530. configurable: true,
  2531. writable: true,
  2532. value: Set.prototype.values
  2533. });
  2534. Object.defineProperty(Set.prototype, 'keys', {
  2535. configurable: true,
  2536. writable: true,
  2537. value: Set.prototype.values
  2538. });
  2539. function needsPolyfill(global) {
  2540. var $__11 = global,
  2541. Set = $__11.Set,
  2542. Symbol = $__11.Symbol;
  2543. if (!Set || !hasNativeSymbol() || !Set.prototype[Symbol.iterator] || !Set.prototype.values) {
  2544. return true;
  2545. }
  2546. try {
  2547. return new Set([1]).size !== 1;
  2548. } catch (e) {
  2549. return false;
  2550. }
  2551. }
  2552. function polyfillSet(global) {
  2553. if (needsPolyfill(global)) {
  2554. global.Set = Set;
  2555. }
  2556. }
  2557. registerPolyfill(polyfillSet);
  2558. return {
  2559. get Set() {
  2560. return Set;
  2561. },
  2562. get polyfillSet() {
  2563. return polyfillSet;
  2564. }
  2565. };
  2566. });
  2567. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Set.js" + '');
  2568. $traceurRuntime.registerModule("traceur@0.0.112/node_modules/rsvp/lib/rsvp/asap.js", [], function() {
  2569. "use strict";
  2570. var __moduleName = "traceur@0.0.112/node_modules/rsvp/lib/rsvp/asap.js";
  2571. var len = 0;
  2572. var toString = {}.toString;
  2573. var vertxNext;
  2574. function asap(callback, arg) {
  2575. queue[len] = callback;
  2576. queue[len + 1] = arg;
  2577. len += 2;
  2578. if (len === 2) {
  2579. scheduleFlush();
  2580. }
  2581. }
  2582. var browserWindow = (typeof window !== 'undefined') ? window : undefined;
  2583. var browserGlobal = browserWindow || {};
  2584. var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
  2585. var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
  2586. var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
  2587. function useNextTick() {
  2588. var nextTick = process.nextTick;
  2589. var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);
  2590. if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {
  2591. nextTick = setImmediate;
  2592. }
  2593. return function() {
  2594. nextTick(flush);
  2595. };
  2596. }
  2597. function useVertxTimer() {
  2598. return function() {
  2599. vertxNext(flush);
  2600. };
  2601. }
  2602. function useMutationObserver() {
  2603. var iterations = 0;
  2604. var observer = new BrowserMutationObserver(flush);
  2605. var node = document.createTextNode('');
  2606. observer.observe(node, {characterData: true});
  2607. return function() {
  2608. node.data = (iterations = ++iterations % 2);
  2609. };
  2610. }
  2611. function useMessageChannel() {
  2612. var channel = new MessageChannel();
  2613. channel.port1.onmessage = flush;
  2614. return function() {
  2615. channel.port2.postMessage(0);
  2616. };
  2617. }
  2618. function useSetTimeout() {
  2619. return function() {
  2620. setTimeout(flush, 1);
  2621. };
  2622. }
  2623. var queue = new Array(1000);
  2624. function flush() {
  2625. for (var i = 0; i < len; i += 2) {
  2626. var callback = queue[i];
  2627. var arg = queue[i + 1];
  2628. callback(arg);
  2629. queue[i] = undefined;
  2630. queue[i + 1] = undefined;
  2631. }
  2632. len = 0;
  2633. }
  2634. function attemptVertex() {
  2635. try {
  2636. var r = require;
  2637. var vertx = r('vertx');
  2638. vertxNext = vertx.runOnLoop || vertx.runOnContext;
  2639. return useVertxTimer();
  2640. } catch (e) {
  2641. return useSetTimeout();
  2642. }
  2643. }
  2644. var scheduleFlush;
  2645. if (isNode) {
  2646. scheduleFlush = useNextTick();
  2647. } else if (BrowserMutationObserver) {
  2648. scheduleFlush = useMutationObserver();
  2649. } else if (isWorker) {
  2650. scheduleFlush = useMessageChannel();
  2651. } else if (browserWindow === undefined && typeof require === 'function') {
  2652. scheduleFlush = attemptVertex();
  2653. } else {
  2654. scheduleFlush = useSetTimeout();
  2655. }
  2656. return {get default() {
  2657. return asap;
  2658. }};
  2659. });
  2660. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Promise.js", [], function() {
  2661. "use strict";
  2662. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Promise.js";
  2663. var async = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../../node_modules/rsvp/lib/rsvp/asap.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")).default;
  2664. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")),
  2665. isObject = $__9.isObject,
  2666. registerPolyfill = $__9.registerPolyfill;
  2667. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")),
  2668. createPrivateSymbol = $__10.createPrivateSymbol,
  2669. getPrivate = $__10.getPrivate,
  2670. setPrivate = $__10.setPrivate;
  2671. var promiseRaw = {};
  2672. function isPromise(x) {
  2673. return x && typeof x === 'object' && x.status_ !== undefined;
  2674. }
  2675. function idResolveHandler(x) {
  2676. return x;
  2677. }
  2678. function idRejectHandler(x) {
  2679. throw x;
  2680. }
  2681. function chain(promise) {
  2682. var onResolve = arguments[1] !== (void 0) ? arguments[1] : idResolveHandler;
  2683. var onReject = arguments[2] !== (void 0) ? arguments[2] : idRejectHandler;
  2684. var deferred = getDeferred(promise.constructor);
  2685. switch (promise.status_) {
  2686. case undefined:
  2687. throw TypeError;
  2688. case 0:
  2689. promise.onResolve_.push(onResolve, deferred);
  2690. promise.onReject_.push(onReject, deferred);
  2691. break;
  2692. case +1:
  2693. promiseEnqueue(promise.value_, [onResolve, deferred]);
  2694. break;
  2695. case -1:
  2696. promiseEnqueue(promise.value_, [onReject, deferred]);
  2697. break;
  2698. }
  2699. return deferred.promise;
  2700. }
  2701. function getDeferred(C) {
  2702. if (this === $Promise) {
  2703. var promise = promiseInit(new $Promise(promiseRaw));
  2704. return {
  2705. promise: promise,
  2706. resolve: function(x) {
  2707. promiseResolve(promise, x);
  2708. },
  2709. reject: function(r) {
  2710. promiseReject(promise, r);
  2711. }
  2712. };
  2713. } else {
  2714. var result = {};
  2715. result.promise = new C(function(resolve, reject) {
  2716. result.resolve = resolve;
  2717. result.reject = reject;
  2718. });
  2719. return result;
  2720. }
  2721. }
  2722. function promiseSet(promise, status, value, onResolve, onReject) {
  2723. promise.status_ = status;
  2724. promise.value_ = value;
  2725. promise.onResolve_ = onResolve;
  2726. promise.onReject_ = onReject;
  2727. return promise;
  2728. }
  2729. function promiseInit(promise) {
  2730. return promiseSet(promise, 0, undefined, [], []);
  2731. }
  2732. var Promise = function() {
  2733. function Promise(resolver) {
  2734. if (resolver === promiseRaw)
  2735. return;
  2736. if (typeof resolver !== 'function')
  2737. throw new TypeError;
  2738. var promise = promiseInit(this);
  2739. try {
  2740. resolver(function(x) {
  2741. promiseResolve(promise, x);
  2742. }, function(r) {
  2743. promiseReject(promise, r);
  2744. });
  2745. } catch (e) {
  2746. promiseReject(promise, e);
  2747. }
  2748. }
  2749. return ($traceurRuntime.createClass)(Promise, {
  2750. catch: function(onReject) {
  2751. return this.then(undefined, onReject);
  2752. },
  2753. then: function(onResolve, onReject) {
  2754. if (typeof onResolve !== 'function')
  2755. onResolve = idResolveHandler;
  2756. if (typeof onReject !== 'function')
  2757. onReject = idRejectHandler;
  2758. var that = this;
  2759. var constructor = this.constructor;
  2760. return chain(this, function(x) {
  2761. x = promiseCoerce(constructor, x);
  2762. return x === that ? onReject(new TypeError) : isPromise(x) ? x.then(onResolve, onReject) : onResolve(x);
  2763. }, onReject);
  2764. }
  2765. }, {
  2766. resolve: function(x) {
  2767. if (this === $Promise) {
  2768. if (isPromise(x)) {
  2769. return x;
  2770. }
  2771. return promiseSet(new $Promise(promiseRaw), +1, x);
  2772. } else {
  2773. return new this(function(resolve, reject) {
  2774. resolve(x);
  2775. });
  2776. }
  2777. },
  2778. reject: function(r) {
  2779. if (this === $Promise) {
  2780. return promiseSet(new $Promise(promiseRaw), -1, r);
  2781. } else {
  2782. return new this(function(resolve, reject) {
  2783. reject(r);
  2784. });
  2785. }
  2786. },
  2787. all: function(values) {
  2788. var deferred = getDeferred(this);
  2789. var resolutions = [];
  2790. try {
  2791. var makeCountdownFunction = function(i) {
  2792. return function(x) {
  2793. resolutions[i] = x;
  2794. if (--count === 0)
  2795. deferred.resolve(resolutions);
  2796. };
  2797. };
  2798. var count = 0;
  2799. var i = 0;
  2800. var $__4 = true;
  2801. var $__5 = false;
  2802. var $__6 = undefined;
  2803. try {
  2804. for (var $__2 = void 0,
  2805. $__1 = (values)[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) {
  2806. var value = $__2.value;
  2807. {
  2808. var countdownFunction = makeCountdownFunction(i);
  2809. this.resolve(value).then(countdownFunction, function(r) {
  2810. deferred.reject(r);
  2811. });
  2812. ++i;
  2813. ++count;
  2814. }
  2815. }
  2816. } catch ($__7) {
  2817. $__5 = true;
  2818. $__6 = $__7;
  2819. } finally {
  2820. try {
  2821. if (!$__4 && $__1.return != null) {
  2822. $__1.return();
  2823. }
  2824. } finally {
  2825. if ($__5) {
  2826. throw $__6;
  2827. }
  2828. }
  2829. }
  2830. if (count === 0) {
  2831. deferred.resolve(resolutions);
  2832. }
  2833. } catch (e) {
  2834. deferred.reject(e);
  2835. }
  2836. return deferred.promise;
  2837. },
  2838. race: function(values) {
  2839. var deferred = getDeferred(this);
  2840. try {
  2841. for (var i = 0; i < values.length; i++) {
  2842. this.resolve(values[i]).then(function(x) {
  2843. deferred.resolve(x);
  2844. }, function(r) {
  2845. deferred.reject(r);
  2846. });
  2847. }
  2848. } catch (e) {
  2849. deferred.reject(e);
  2850. }
  2851. return deferred.promise;
  2852. }
  2853. });
  2854. }();
  2855. var $Promise = Promise;
  2856. var $PromiseReject = $Promise.reject;
  2857. function promiseResolve(promise, x) {
  2858. promiseDone(promise, +1, x, promise.onResolve_);
  2859. }
  2860. function promiseReject(promise, r) {
  2861. promiseDone(promise, -1, r, promise.onReject_);
  2862. }
  2863. function promiseDone(promise, status, value, reactions) {
  2864. if (promise.status_ !== 0)
  2865. return;
  2866. promiseEnqueue(value, reactions);
  2867. promiseSet(promise, status, value);
  2868. }
  2869. function promiseEnqueue(value, tasks) {
  2870. async(function() {
  2871. for (var i = 0; i < tasks.length; i += 2) {
  2872. promiseHandle(value, tasks[i], tasks[i + 1]);
  2873. }
  2874. });
  2875. }
  2876. function promiseHandle(value, handler, deferred) {
  2877. try {
  2878. var result = handler(value);
  2879. if (result === deferred.promise)
  2880. throw new TypeError;
  2881. else if (isPromise(result))
  2882. chain(result, deferred.resolve, deferred.reject);
  2883. else
  2884. deferred.resolve(result);
  2885. } catch (e) {
  2886. try {
  2887. deferred.reject(e);
  2888. } catch (e) {}
  2889. }
  2890. }
  2891. var thenableSymbol = createPrivateSymbol();
  2892. function promiseCoerce(constructor, x) {
  2893. if (!isPromise(x) && isObject(x)) {
  2894. var then;
  2895. try {
  2896. then = x.then;
  2897. } catch (r) {
  2898. var promise = $PromiseReject.call(constructor, r);
  2899. setPrivate(x, thenableSymbol, promise);
  2900. return promise;
  2901. }
  2902. if (typeof then === 'function') {
  2903. var p = getPrivate(x, thenableSymbol);
  2904. if (p) {
  2905. return p;
  2906. } else {
  2907. var deferred = getDeferred(constructor);
  2908. setPrivate(x, thenableSymbol, deferred.promise);
  2909. try {
  2910. then.call(x, deferred.resolve, deferred.reject);
  2911. } catch (r) {
  2912. deferred.reject(r);
  2913. }
  2914. return deferred.promise;
  2915. }
  2916. }
  2917. }
  2918. return x;
  2919. }
  2920. function polyfillPromise(global) {
  2921. if (!global.Promise)
  2922. global.Promise = Promise;
  2923. }
  2924. registerPolyfill(polyfillPromise);
  2925. return {
  2926. get Promise() {
  2927. return Promise;
  2928. },
  2929. get polyfillPromise() {
  2930. return polyfillPromise;
  2931. }
  2932. };
  2933. });
  2934. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Promise.js" + '');
  2935. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/StringIterator.js", [], function() {
  2936. "use strict";
  2937. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/StringIterator.js";
  2938. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/StringIterator.js")),
  2939. createIteratorResultObject = $__3.createIteratorResultObject,
  2940. isObject = $__3.isObject;
  2941. var hasOwnProperty = Object.prototype.hasOwnProperty;
  2942. var iteratedString = Symbol('iteratedString');
  2943. var stringIteratorNextIndex = Symbol('stringIteratorNextIndex');
  2944. var StringIterator = function() {
  2945. var $__1;
  2946. function StringIterator() {}
  2947. return ($traceurRuntime.createClass)(StringIterator, ($__1 = {}, Object.defineProperty($__1, "next", {
  2948. value: function() {
  2949. var o = this;
  2950. if (!isObject(o) || !hasOwnProperty.call(o, iteratedString)) {
  2951. throw new TypeError('this must be a StringIterator object');
  2952. }
  2953. var s = o[iteratedString];
  2954. if (s === undefined) {
  2955. return createIteratorResultObject(undefined, true);
  2956. }
  2957. var position = o[stringIteratorNextIndex];
  2958. var len = s.length;
  2959. if (position >= len) {
  2960. o[iteratedString] = undefined;
  2961. return createIteratorResultObject(undefined, true);
  2962. }
  2963. var first = s.charCodeAt(position);
  2964. var resultString;
  2965. if (first < 0xD800 || first > 0xDBFF || position + 1 === len) {
  2966. resultString = String.fromCharCode(first);
  2967. } else {
  2968. var second = s.charCodeAt(position + 1);
  2969. if (second < 0xDC00 || second > 0xDFFF) {
  2970. resultString = String.fromCharCode(first);
  2971. } else {
  2972. resultString = String.fromCharCode(first) + String.fromCharCode(second);
  2973. }
  2974. }
  2975. o[stringIteratorNextIndex] = position + resultString.length;
  2976. return createIteratorResultObject(resultString, false);
  2977. },
  2978. configurable: true,
  2979. enumerable: true,
  2980. writable: true
  2981. }), Object.defineProperty($__1, Symbol.iterator, {
  2982. value: function() {
  2983. return this;
  2984. },
  2985. configurable: true,
  2986. enumerable: true,
  2987. writable: true
  2988. }), $__1), {});
  2989. }();
  2990. function createStringIterator(string) {
  2991. var s = String(string);
  2992. var iterator = Object.create(StringIterator.prototype);
  2993. iterator[iteratedString] = s;
  2994. iterator[stringIteratorNextIndex] = 0;
  2995. return iterator;
  2996. }
  2997. return {get createStringIterator() {
  2998. return createStringIterator;
  2999. }};
  3000. });
  3001. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/String.js", [], function() {
  3002. "use strict";
  3003. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/String.js";
  3004. var checkObjectCoercible = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../checkObjectCoercible.js", "traceur@0.0.112/src/runtime/polyfills/String.js")).default;
  3005. var createStringIterator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StringIterator.js", "traceur@0.0.112/src/runtime/polyfills/String.js")).createStringIterator;
  3006. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/String.js")),
  3007. maybeAddFunctions = $__3.maybeAddFunctions,
  3008. maybeAddIterator = $__3.maybeAddIterator,
  3009. registerPolyfill = $__3.registerPolyfill;
  3010. var $toString = Object.prototype.toString;
  3011. var $indexOf = String.prototype.indexOf;
  3012. var $lastIndexOf = String.prototype.lastIndexOf;
  3013. function startsWith(search) {
  3014. var string = String(this);
  3015. if (this == null || $toString.call(search) == '[object RegExp]') {
  3016. throw TypeError();
  3017. }
  3018. var stringLength = string.length;
  3019. var searchString = String(search);
  3020. var searchLength = searchString.length;
  3021. var position = arguments.length > 1 ? arguments[1] : undefined;
  3022. var pos = position ? Number(position) : 0;
  3023. if (isNaN(pos)) {
  3024. pos = 0;
  3025. }
  3026. var start = Math.min(Math.max(pos, 0), stringLength);
  3027. return $indexOf.call(string, searchString, pos) == start;
  3028. }
  3029. function endsWith(search) {
  3030. var string = String(this);
  3031. if (this == null || $toString.call(search) == '[object RegExp]') {
  3032. throw TypeError();
  3033. }
  3034. var stringLength = string.length;
  3035. var searchString = String(search);
  3036. var searchLength = searchString.length;
  3037. var pos = stringLength;
  3038. if (arguments.length > 1) {
  3039. var position = arguments[1];
  3040. if (position !== undefined) {
  3041. pos = position ? Number(position) : 0;
  3042. if (isNaN(pos)) {
  3043. pos = 0;
  3044. }
  3045. }
  3046. }
  3047. var end = Math.min(Math.max(pos, 0), stringLength);
  3048. var start = end - searchLength;
  3049. if (start < 0) {
  3050. return false;
  3051. }
  3052. return $lastIndexOf.call(string, searchString, start) == start;
  3053. }
  3054. function includes(search) {
  3055. if (this == null) {
  3056. throw TypeError();
  3057. }
  3058. var string = String(this);
  3059. if (search && $toString.call(search) == '[object RegExp]') {
  3060. throw TypeError();
  3061. }
  3062. var stringLength = string.length;
  3063. var searchString = String(search);
  3064. var searchLength = searchString.length;
  3065. var position = arguments.length > 1 ? arguments[1] : undefined;
  3066. var pos = position ? Number(position) : 0;
  3067. if (pos != pos) {
  3068. pos = 0;
  3069. }
  3070. var start = Math.min(Math.max(pos, 0), stringLength);
  3071. if (searchLength + start > stringLength) {
  3072. return false;
  3073. }
  3074. return $indexOf.call(string, searchString, pos) != -1;
  3075. }
  3076. function repeat(count) {
  3077. if (this == null) {
  3078. throw TypeError();
  3079. }
  3080. var string = String(this);
  3081. var n = count ? Number(count) : 0;
  3082. if (isNaN(n)) {
  3083. n = 0;
  3084. }
  3085. if (n < 0 || n == Infinity) {
  3086. throw RangeError();
  3087. }
  3088. if (n == 0) {
  3089. return '';
  3090. }
  3091. var result = '';
  3092. while (n--) {
  3093. result += string;
  3094. }
  3095. return result;
  3096. }
  3097. function codePointAt(position) {
  3098. if (this == null) {
  3099. throw TypeError();
  3100. }
  3101. var string = String(this);
  3102. var size = string.length;
  3103. var index = position ? Number(position) : 0;
  3104. if (isNaN(index)) {
  3105. index = 0;
  3106. }
  3107. if (index < 0 || index >= size) {
  3108. return undefined;
  3109. }
  3110. var first = string.charCodeAt(index);
  3111. var second;
  3112. if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {
  3113. second = string.charCodeAt(index + 1);
  3114. if (second >= 0xDC00 && second <= 0xDFFF) {
  3115. return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
  3116. }
  3117. }
  3118. return first;
  3119. }
  3120. function raw(callsite) {
  3121. var raw = callsite.raw;
  3122. var len = raw.length >>> 0;
  3123. if (len === 0)
  3124. return '';
  3125. var s = '';
  3126. var i = 0;
  3127. while (true) {
  3128. s += raw[i];
  3129. if (i + 1 === len)
  3130. return s;
  3131. s += arguments[++i];
  3132. }
  3133. }
  3134. function fromCodePoint(_) {
  3135. var codeUnits = [];
  3136. var floor = Math.floor;
  3137. var highSurrogate;
  3138. var lowSurrogate;
  3139. var index = -1;
  3140. var length = arguments.length;
  3141. if (!length) {
  3142. return '';
  3143. }
  3144. while (++index < length) {
  3145. var codePoint = Number(arguments[index]);
  3146. if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) {
  3147. throw RangeError('Invalid code point: ' + codePoint);
  3148. }
  3149. if (codePoint <= 0xFFFF) {
  3150. codeUnits.push(codePoint);
  3151. } else {
  3152. codePoint -= 0x10000;
  3153. highSurrogate = (codePoint >> 10) + 0xD800;
  3154. lowSurrogate = (codePoint % 0x400) + 0xDC00;
  3155. codeUnits.push(highSurrogate, lowSurrogate);
  3156. }
  3157. }
  3158. return String.fromCharCode.apply(null, codeUnits);
  3159. }
  3160. function stringPrototypeIterator() {
  3161. var o = checkObjectCoercible(this);
  3162. var s = String(o);
  3163. return createStringIterator(s);
  3164. }
  3165. function polyfillString(global) {
  3166. var String = global.String;
  3167. maybeAddFunctions(String.prototype, ['codePointAt', codePointAt, 'endsWith', endsWith, 'includes', includes, 'repeat', repeat, 'startsWith', startsWith]);
  3168. maybeAddFunctions(String, ['fromCodePoint', fromCodePoint, 'raw', raw]);
  3169. maybeAddIterator(String.prototype, stringPrototypeIterator, Symbol);
  3170. }
  3171. registerPolyfill(polyfillString);
  3172. return {
  3173. get startsWith() {
  3174. return startsWith;
  3175. },
  3176. get endsWith() {
  3177. return endsWith;
  3178. },
  3179. get includes() {
  3180. return includes;
  3181. },
  3182. get repeat() {
  3183. return repeat;
  3184. },
  3185. get codePointAt() {
  3186. return codePointAt;
  3187. },
  3188. get raw() {
  3189. return raw;
  3190. },
  3191. get fromCodePoint() {
  3192. return fromCodePoint;
  3193. },
  3194. get stringPrototypeIterator() {
  3195. return stringPrototypeIterator;
  3196. },
  3197. get polyfillString() {
  3198. return polyfillString;
  3199. }
  3200. };
  3201. });
  3202. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/String.js" + '');
  3203. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js", [], function() {
  3204. "use strict";
  3205. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js";
  3206. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js")),
  3207. toObject = $__2.toObject,
  3208. toUint32 = $__2.toUint32,
  3209. createIteratorResultObject = $__2.createIteratorResultObject;
  3210. var ARRAY_ITERATOR_KIND_KEYS = 1;
  3211. var ARRAY_ITERATOR_KIND_VALUES = 2;
  3212. var ARRAY_ITERATOR_KIND_ENTRIES = 3;
  3213. var ArrayIterator = function() {
  3214. var $__1;
  3215. function ArrayIterator() {}
  3216. return ($traceurRuntime.createClass)(ArrayIterator, ($__1 = {}, Object.defineProperty($__1, "next", {
  3217. value: function() {
  3218. var iterator = toObject(this);
  3219. var array = iterator.iteratorObject_;
  3220. if (!array) {
  3221. throw new TypeError('Object is not an ArrayIterator');
  3222. }
  3223. var index = iterator.arrayIteratorNextIndex_;
  3224. var itemKind = iterator.arrayIterationKind_;
  3225. var length = toUint32(array.length);
  3226. if (index >= length) {
  3227. iterator.arrayIteratorNextIndex_ = Infinity;
  3228. return createIteratorResultObject(undefined, true);
  3229. }
  3230. iterator.arrayIteratorNextIndex_ = index + 1;
  3231. if (itemKind == ARRAY_ITERATOR_KIND_VALUES)
  3232. return createIteratorResultObject(array[index], false);
  3233. if (itemKind == ARRAY_ITERATOR_KIND_ENTRIES)
  3234. return createIteratorResultObject([index, array[index]], false);
  3235. return createIteratorResultObject(index, false);
  3236. },
  3237. configurable: true,
  3238. enumerable: true,
  3239. writable: true
  3240. }), Object.defineProperty($__1, Symbol.iterator, {
  3241. value: function() {
  3242. return this;
  3243. },
  3244. configurable: true,
  3245. enumerable: true,
  3246. writable: true
  3247. }), $__1), {});
  3248. }();
  3249. function createArrayIterator(array, kind) {
  3250. var object = toObject(array);
  3251. var iterator = new ArrayIterator;
  3252. iterator.iteratorObject_ = object;
  3253. iterator.arrayIteratorNextIndex_ = 0;
  3254. iterator.arrayIterationKind_ = kind;
  3255. return iterator;
  3256. }
  3257. function entries() {
  3258. return createArrayIterator(this, ARRAY_ITERATOR_KIND_ENTRIES);
  3259. }
  3260. function keys() {
  3261. return createArrayIterator(this, ARRAY_ITERATOR_KIND_KEYS);
  3262. }
  3263. function values() {
  3264. return createArrayIterator(this, ARRAY_ITERATOR_KIND_VALUES);
  3265. }
  3266. return {
  3267. get entries() {
  3268. return entries;
  3269. },
  3270. get keys() {
  3271. return keys;
  3272. },
  3273. get values() {
  3274. return values;
  3275. }
  3276. };
  3277. });
  3278. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Array.js", [], function() {
  3279. "use strict";
  3280. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Array.js";
  3281. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrayIterator.js", "traceur@0.0.112/src/runtime/polyfills/Array.js")),
  3282. entries = $__9.entries,
  3283. keys = $__9.keys,
  3284. jsValues = $__9.values;
  3285. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Array.js")),
  3286. checkIterable = $__10.checkIterable,
  3287. isCallable = $__10.isCallable,
  3288. isConstructor = $__10.isConstructor,
  3289. maybeAddFunctions = $__10.maybeAddFunctions,
  3290. maybeAddIterator = $__10.maybeAddIterator,
  3291. registerPolyfill = $__10.registerPolyfill,
  3292. toInteger = $__10.toInteger,
  3293. toLength = $__10.toLength,
  3294. toObject = $__10.toObject;
  3295. function from(arrLike) {
  3296. var mapFn = arguments[1];
  3297. var thisArg = arguments[2];
  3298. var C = this;
  3299. var items = toObject(arrLike);
  3300. var mapping = mapFn !== undefined;
  3301. var k = 0;
  3302. var arr,
  3303. len;
  3304. if (mapping && !isCallable(mapFn)) {
  3305. throw TypeError();
  3306. }
  3307. if (checkIterable(items)) {
  3308. arr = isConstructor(C) ? new C() : [];
  3309. var $__3 = true;
  3310. var $__4 = false;
  3311. var $__5 = undefined;
  3312. try {
  3313. for (var $__1 = void 0,
  3314. $__0 = (items)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) {
  3315. var item = $__1.value;
  3316. {
  3317. if (mapping) {
  3318. arr[k] = mapFn.call(thisArg, item, k);
  3319. } else {
  3320. arr[k] = item;
  3321. }
  3322. k++;
  3323. }
  3324. }
  3325. } catch ($__6) {
  3326. $__4 = true;
  3327. $__5 = $__6;
  3328. } finally {
  3329. try {
  3330. if (!$__3 && $__0.return != null) {
  3331. $__0.return();
  3332. }
  3333. } finally {
  3334. if ($__4) {
  3335. throw $__5;
  3336. }
  3337. }
  3338. }
  3339. arr.length = k;
  3340. return arr;
  3341. }
  3342. len = toLength(items.length);
  3343. arr = isConstructor(C) ? new C(len) : new Array(len);
  3344. for (; k < len; k++) {
  3345. if (mapping) {
  3346. arr[k] = typeof thisArg === 'undefined' ? mapFn(items[k], k) : mapFn.call(thisArg, items[k], k);
  3347. } else {
  3348. arr[k] = items[k];
  3349. }
  3350. }
  3351. arr.length = len;
  3352. return arr;
  3353. }
  3354. function of() {
  3355. for (var items = [],
  3356. $__7 = 0; $__7 < arguments.length; $__7++)
  3357. items[$__7] = arguments[$__7];
  3358. var C = this;
  3359. var len = items.length;
  3360. var arr = isConstructor(C) ? new C(len) : new Array(len);
  3361. for (var k = 0; k < len; k++) {
  3362. arr[k] = items[k];
  3363. }
  3364. arr.length = len;
  3365. return arr;
  3366. }
  3367. function fill(value) {
  3368. var start = arguments[1] !== (void 0) ? arguments[1] : 0;
  3369. var end = arguments[2];
  3370. var object = toObject(this);
  3371. var len = toLength(object.length);
  3372. var fillStart = toInteger(start);
  3373. var fillEnd = end !== undefined ? toInteger(end) : len;
  3374. fillStart = fillStart < 0 ? Math.max(len + fillStart, 0) : Math.min(fillStart, len);
  3375. fillEnd = fillEnd < 0 ? Math.max(len + fillEnd, 0) : Math.min(fillEnd, len);
  3376. while (fillStart < fillEnd) {
  3377. object[fillStart] = value;
  3378. fillStart++;
  3379. }
  3380. return object;
  3381. }
  3382. function find(predicate) {
  3383. var thisArg = arguments[1];
  3384. return findHelper(this, predicate, thisArg);
  3385. }
  3386. function findIndex(predicate) {
  3387. var thisArg = arguments[1];
  3388. return findHelper(this, predicate, thisArg, true);
  3389. }
  3390. function findHelper(self, predicate) {
  3391. var thisArg = arguments[2];
  3392. var returnIndex = arguments[3] !== (void 0) ? arguments[3] : false;
  3393. var object = toObject(self);
  3394. var len = toLength(object.length);
  3395. if (!isCallable(predicate)) {
  3396. throw TypeError();
  3397. }
  3398. for (var i = 0; i < len; i++) {
  3399. var value = object[i];
  3400. if (predicate.call(thisArg, value, i, object)) {
  3401. return returnIndex ? i : value;
  3402. }
  3403. }
  3404. return returnIndex ? -1 : undefined;
  3405. }
  3406. function polyfillArray(global) {
  3407. var $__8 = global,
  3408. Array = $__8.Array,
  3409. Object = $__8.Object,
  3410. Symbol = $__8.Symbol;
  3411. var values = jsValues;
  3412. if (Symbol && Symbol.iterator && Array.prototype[Symbol.iterator]) {
  3413. values = Array.prototype[Symbol.iterator];
  3414. }
  3415. maybeAddFunctions(Array.prototype, ['entries', entries, 'keys', keys, 'values', values, 'fill', fill, 'find', find, 'findIndex', findIndex]);
  3416. maybeAddFunctions(Array, ['from', from, 'of', of]);
  3417. maybeAddIterator(Array.prototype, values, Symbol);
  3418. maybeAddIterator(Object.getPrototypeOf([].values()), function() {
  3419. return this;
  3420. }, Symbol);
  3421. }
  3422. registerPolyfill(polyfillArray);
  3423. return {
  3424. get from() {
  3425. return from;
  3426. },
  3427. get of() {
  3428. return of;
  3429. },
  3430. get fill() {
  3431. return fill;
  3432. },
  3433. get find() {
  3434. return find;
  3435. },
  3436. get findIndex() {
  3437. return findIndex;
  3438. },
  3439. get polyfillArray() {
  3440. return polyfillArray;
  3441. }
  3442. };
  3443. });
  3444. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Array.js" + '');
  3445. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/assign.js", [], function() {
  3446. "use strict";
  3447. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/assign.js";
  3448. var keys = Object.keys;
  3449. function assign(target) {
  3450. for (var i = 1; i < arguments.length; i++) {
  3451. var source = arguments[i];
  3452. var props = source == null ? [] : keys(source);
  3453. var p = void 0,
  3454. length = props.length;
  3455. for (p = 0; p < length; p++) {
  3456. var name = props[p];
  3457. target[name] = source[name];
  3458. }
  3459. }
  3460. return target;
  3461. }
  3462. return {get default() {
  3463. return assign;
  3464. }};
  3465. });
  3466. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Object.js", [], function() {
  3467. "use strict";
  3468. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Object.js";
  3469. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Object.js")),
  3470. maybeAddFunctions = $__2.maybeAddFunctions,
  3471. registerPolyfill = $__2.registerPolyfill;
  3472. var assign = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./assign.js", "traceur@0.0.112/src/runtime/polyfills/Object.js")).default;
  3473. var $__0 = Object,
  3474. defineProperty = $__0.defineProperty,
  3475. getOwnPropertyDescriptor = $__0.getOwnPropertyDescriptor,
  3476. getOwnPropertyNames = $__0.getOwnPropertyNames;
  3477. function is(left, right) {
  3478. if (left === right)
  3479. return left !== 0 || 1 / left === 1 / right;
  3480. return left !== left && right !== right;
  3481. }
  3482. function mixin(target, source) {
  3483. var props = getOwnPropertyNames(source);
  3484. var p,
  3485. descriptor,
  3486. length = props.length;
  3487. for (p = 0; p < length; p++) {
  3488. var name = props[p];
  3489. descriptor = getOwnPropertyDescriptor(source, props[p]);
  3490. defineProperty(target, props[p], descriptor);
  3491. }
  3492. return target;
  3493. }
  3494. function polyfillObject(global) {
  3495. var Object = global.Object;
  3496. maybeAddFunctions(Object, ['assign', assign, 'is', is, 'mixin', mixin]);
  3497. }
  3498. registerPolyfill(polyfillObject);
  3499. return {
  3500. get assign() {
  3501. return assign;
  3502. },
  3503. get is() {
  3504. return is;
  3505. },
  3506. get mixin() {
  3507. return mixin;
  3508. },
  3509. get polyfillObject() {
  3510. return polyfillObject;
  3511. }
  3512. };
  3513. });
  3514. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Object.js" + '');
  3515. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Number.js", [], function() {
  3516. "use strict";
  3517. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Number.js";
  3518. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Number.js")),
  3519. isNumber = $__1.isNumber,
  3520. maybeAddConsts = $__1.maybeAddConsts,
  3521. maybeAddFunctions = $__1.maybeAddFunctions,
  3522. registerPolyfill = $__1.registerPolyfill,
  3523. toInteger = $__1.toInteger;
  3524. var $abs = Math.abs;
  3525. var $isFinite = isFinite;
  3526. var $isNaN = isNaN;
  3527. var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;
  3528. var MIN_SAFE_INTEGER = -Math.pow(2, 53) + 1;
  3529. var EPSILON = Math.pow(2, -52);
  3530. function NumberIsFinite(number) {
  3531. return isNumber(number) && $isFinite(number);
  3532. }
  3533. function isInteger(number) {
  3534. return NumberIsFinite(number) && toInteger(number) === number;
  3535. }
  3536. function NumberIsNaN(number) {
  3537. return isNumber(number) && $isNaN(number);
  3538. }
  3539. function isSafeInteger(number) {
  3540. if (NumberIsFinite(number)) {
  3541. var integral = toInteger(number);
  3542. if (integral === number)
  3543. return $abs(integral) <= MAX_SAFE_INTEGER;
  3544. }
  3545. return false;
  3546. }
  3547. function polyfillNumber(global) {
  3548. var Number = global.Number;
  3549. maybeAddConsts(Number, ['MAX_SAFE_INTEGER', MAX_SAFE_INTEGER, 'MIN_SAFE_INTEGER', MIN_SAFE_INTEGER, 'EPSILON', EPSILON]);
  3550. maybeAddFunctions(Number, ['isFinite', NumberIsFinite, 'isInteger', isInteger, 'isNaN', NumberIsNaN, 'isSafeInteger', isSafeInteger]);
  3551. }
  3552. registerPolyfill(polyfillNumber);
  3553. return {
  3554. get MAX_SAFE_INTEGER() {
  3555. return MAX_SAFE_INTEGER;
  3556. },
  3557. get MIN_SAFE_INTEGER() {
  3558. return MIN_SAFE_INTEGER;
  3559. },
  3560. get EPSILON() {
  3561. return EPSILON;
  3562. },
  3563. get isFinite() {
  3564. return NumberIsFinite;
  3565. },
  3566. get isInteger() {
  3567. return isInteger;
  3568. },
  3569. get isNaN() {
  3570. return NumberIsNaN;
  3571. },
  3572. get isSafeInteger() {
  3573. return isSafeInteger;
  3574. },
  3575. get polyfillNumber() {
  3576. return polyfillNumber;
  3577. }
  3578. };
  3579. });
  3580. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Number.js" + '');
  3581. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/fround.js", [], function() {
  3582. "use strict";
  3583. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/fround.js";
  3584. var $isFinite = isFinite;
  3585. var $isNaN = isNaN;
  3586. var $__0 = Math,
  3587. LN2 = $__0.LN2,
  3588. abs = $__0.abs,
  3589. floor = $__0.floor,
  3590. log = $__0.log,
  3591. min = $__0.min,
  3592. pow = $__0.pow;
  3593. function packIEEE754(v, ebits, fbits) {
  3594. var bias = (1 << (ebits - 1)) - 1,
  3595. s,
  3596. e,
  3597. f,
  3598. ln,
  3599. i,
  3600. bits,
  3601. str,
  3602. bytes;
  3603. function roundToEven(n) {
  3604. var w = floor(n),
  3605. f = n - w;
  3606. if (f < 0.5)
  3607. return w;
  3608. if (f > 0.5)
  3609. return w + 1;
  3610. return w % 2 ? w + 1 : w;
  3611. }
  3612. if (v !== v) {
  3613. e = (1 << ebits) - 1;
  3614. f = pow(2, fbits - 1);
  3615. s = 0;
  3616. } else if (v === Infinity || v === -Infinity) {
  3617. e = (1 << ebits) - 1;
  3618. f = 0;
  3619. s = (v < 0) ? 1 : 0;
  3620. } else if (v === 0) {
  3621. e = 0;
  3622. f = 0;
  3623. s = (1 / v === -Infinity) ? 1 : 0;
  3624. } else {
  3625. s = v < 0;
  3626. v = abs(v);
  3627. if (v >= pow(2, 1 - bias)) {
  3628. e = min(floor(log(v) / LN2), 1023);
  3629. f = roundToEven(v / pow(2, e) * pow(2, fbits));
  3630. if (f / pow(2, fbits) >= 2) {
  3631. e = e + 1;
  3632. f = 1;
  3633. }
  3634. if (e > bias) {
  3635. e = (1 << ebits) - 1;
  3636. f = 0;
  3637. } else {
  3638. e = e + bias;
  3639. f = f - pow(2, fbits);
  3640. }
  3641. } else {
  3642. e = 0;
  3643. f = roundToEven(v / pow(2, 1 - bias - fbits));
  3644. }
  3645. }
  3646. bits = [];
  3647. for (i = fbits; i; i -= 1) {
  3648. bits.push(f % 2 ? 1 : 0);
  3649. f = floor(f / 2);
  3650. }
  3651. for (i = ebits; i; i -= 1) {
  3652. bits.push(e % 2 ? 1 : 0);
  3653. e = floor(e / 2);
  3654. }
  3655. bits.push(s ? 1 : 0);
  3656. bits.reverse();
  3657. str = bits.join('');
  3658. bytes = [];
  3659. while (str.length) {
  3660. bytes.push(parseInt(str.substring(0, 8), 2));
  3661. str = str.substring(8);
  3662. }
  3663. return bytes;
  3664. }
  3665. function unpackIEEE754(bytes, ebits, fbits) {
  3666. var bits = [],
  3667. i,
  3668. j,
  3669. b,
  3670. str,
  3671. bias,
  3672. s,
  3673. e,
  3674. f;
  3675. for (i = bytes.length; i; i -= 1) {
  3676. b = bytes[i - 1];
  3677. for (j = 8; j; j -= 1) {
  3678. bits.push(b % 2 ? 1 : 0);
  3679. b = b >> 1;
  3680. }
  3681. }
  3682. bits.reverse();
  3683. str = bits.join('');
  3684. bias = (1 << (ebits - 1)) - 1;
  3685. s = parseInt(str.substring(0, 1), 2) ? -1 : 1;
  3686. e = parseInt(str.substring(1, 1 + ebits), 2);
  3687. f = parseInt(str.substring(1 + ebits), 2);
  3688. if (e === (1 << ebits) - 1) {
  3689. return f !== 0 ? NaN : s * Infinity;
  3690. } else if (e > 0) {
  3691. return s * pow(2, e - bias) * (1 + f / pow(2, fbits));
  3692. } else if (f !== 0) {
  3693. return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));
  3694. } else {
  3695. return s < 0 ? -0 : 0;
  3696. }
  3697. }
  3698. function unpackF32(b) {
  3699. return unpackIEEE754(b, 8, 23);
  3700. }
  3701. function packF32(v) {
  3702. return packIEEE754(v, 8, 23);
  3703. }
  3704. function fround(x) {
  3705. if (x === 0 || !$isFinite(x) || $isNaN(x)) {
  3706. return x;
  3707. }
  3708. return unpackF32(packF32(Number(x)));
  3709. }
  3710. return {get fround() {
  3711. return fround;
  3712. }};
  3713. });
  3714. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Math.js", [], function() {
  3715. "use strict";
  3716. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Math.js";
  3717. var jsFround = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./fround.js", "traceur@0.0.112/src/runtime/polyfills/Math.js")).fround;
  3718. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Math.js")),
  3719. maybeAddFunctions = $__3.maybeAddFunctions,
  3720. registerPolyfill = $__3.registerPolyfill,
  3721. toUint32 = $__3.toUint32;
  3722. var $isFinite = isFinite;
  3723. var $isNaN = isNaN;
  3724. var $__0 = Math,
  3725. abs = $__0.abs,
  3726. ceil = $__0.ceil,
  3727. exp = $__0.exp,
  3728. floor = $__0.floor,
  3729. log = $__0.log,
  3730. pow = $__0.pow,
  3731. sqrt = $__0.sqrt;
  3732. function clz32(x) {
  3733. x = toUint32(+x);
  3734. if (x == 0)
  3735. return 32;
  3736. var result = 0;
  3737. if ((x & 0xFFFF0000) === 0) {
  3738. x <<= 16;
  3739. result += 16;
  3740. }
  3741. ;
  3742. if ((x & 0xFF000000) === 0) {
  3743. x <<= 8;
  3744. result += 8;
  3745. }
  3746. ;
  3747. if ((x & 0xF0000000) === 0) {
  3748. x <<= 4;
  3749. result += 4;
  3750. }
  3751. ;
  3752. if ((x & 0xC0000000) === 0) {
  3753. x <<= 2;
  3754. result += 2;
  3755. }
  3756. ;
  3757. if ((x & 0x80000000) === 0) {
  3758. x <<= 1;
  3759. result += 1;
  3760. }
  3761. ;
  3762. return result;
  3763. }
  3764. function imul(x, y) {
  3765. x = toUint32(+x);
  3766. y = toUint32(+y);
  3767. var xh = (x >>> 16) & 0xffff;
  3768. var xl = x & 0xffff;
  3769. var yh = (y >>> 16) & 0xffff;
  3770. var yl = y & 0xffff;
  3771. return xl * yl + (((xh * yl + xl * yh) << 16) >>> 0) | 0;
  3772. }
  3773. function sign(x) {
  3774. x = +x;
  3775. if (x > 0)
  3776. return 1;
  3777. if (x < 0)
  3778. return -1;
  3779. return x;
  3780. }
  3781. function log10(x) {
  3782. return log(x) * 0.434294481903251828;
  3783. }
  3784. function log2(x) {
  3785. return log(x) * 1.442695040888963407;
  3786. }
  3787. function log1p(x) {
  3788. x = +x;
  3789. if (x < -1 || $isNaN(x)) {
  3790. return NaN;
  3791. }
  3792. if (x === 0 || x === Infinity) {
  3793. return x;
  3794. }
  3795. if (x === -1) {
  3796. return -Infinity;
  3797. }
  3798. var result = 0;
  3799. var n = 50;
  3800. if (x < 0 || x > 1) {
  3801. return log(1 + x);
  3802. }
  3803. for (var i = 1; i < n; i++) {
  3804. if ((i % 2) === 0) {
  3805. result -= pow(x, i) / i;
  3806. } else {
  3807. result += pow(x, i) / i;
  3808. }
  3809. }
  3810. return result;
  3811. }
  3812. function expm1(x) {
  3813. x = +x;
  3814. if (x === -Infinity) {
  3815. return -1;
  3816. }
  3817. if (!$isFinite(x) || x === 0) {
  3818. return x;
  3819. }
  3820. return exp(x) - 1;
  3821. }
  3822. function cosh(x) {
  3823. x = +x;
  3824. if (x === 0) {
  3825. return 1;
  3826. }
  3827. if ($isNaN(x)) {
  3828. return NaN;
  3829. }
  3830. if (!$isFinite(x)) {
  3831. return Infinity;
  3832. }
  3833. if (x < 0) {
  3834. x = -x;
  3835. }
  3836. if (x > 21) {
  3837. return exp(x) / 2;
  3838. }
  3839. return (exp(x) + exp(-x)) / 2;
  3840. }
  3841. function sinh(x) {
  3842. x = +x;
  3843. if (!$isFinite(x) || x === 0) {
  3844. return x;
  3845. }
  3846. return (exp(x) - exp(-x)) / 2;
  3847. }
  3848. function tanh(x) {
  3849. x = +x;
  3850. if (x === 0)
  3851. return x;
  3852. if (!$isFinite(x))
  3853. return sign(x);
  3854. var exp1 = exp(x);
  3855. var exp2 = exp(-x);
  3856. return (exp1 - exp2) / (exp1 + exp2);
  3857. }
  3858. function acosh(x) {
  3859. x = +x;
  3860. if (x < 1)
  3861. return NaN;
  3862. if (!$isFinite(x))
  3863. return x;
  3864. return log(x + sqrt(x + 1) * sqrt(x - 1));
  3865. }
  3866. function asinh(x) {
  3867. x = +x;
  3868. if (x === 0 || !$isFinite(x))
  3869. return x;
  3870. if (x > 0)
  3871. return log(x + sqrt(x * x + 1));
  3872. return -log(-x + sqrt(x * x + 1));
  3873. }
  3874. function atanh(x) {
  3875. x = +x;
  3876. if (x === -1) {
  3877. return -Infinity;
  3878. }
  3879. if (x === 1) {
  3880. return Infinity;
  3881. }
  3882. if (x === 0) {
  3883. return x;
  3884. }
  3885. if ($isNaN(x) || x < -1 || x > 1) {
  3886. return NaN;
  3887. }
  3888. return 0.5 * log((1 + x) / (1 - x));
  3889. }
  3890. function hypot(x, y) {
  3891. var length = arguments.length;
  3892. var args = new Array(length);
  3893. var max = 0;
  3894. for (var i = 0; i < length; i++) {
  3895. var n = arguments[i];
  3896. n = +n;
  3897. if (n === Infinity || n === -Infinity)
  3898. return Infinity;
  3899. n = abs(n);
  3900. if (n > max)
  3901. max = n;
  3902. args[i] = n;
  3903. }
  3904. if (max === 0)
  3905. max = 1;
  3906. var sum = 0;
  3907. var compensation = 0;
  3908. for (var i = 0; i < length; i++) {
  3909. var n = args[i] / max;
  3910. var summand = n * n - compensation;
  3911. var preliminary = sum + summand;
  3912. compensation = (preliminary - sum) - summand;
  3913. sum = preliminary;
  3914. }
  3915. return sqrt(sum) * max;
  3916. }
  3917. function trunc(x) {
  3918. x = +x;
  3919. if (x > 0)
  3920. return floor(x);
  3921. if (x < 0)
  3922. return ceil(x);
  3923. return x;
  3924. }
  3925. var fround,
  3926. f32;
  3927. if (typeof Float32Array === 'function') {
  3928. f32 = new Float32Array(1);
  3929. fround = function(x) {
  3930. f32[0] = Number(x);
  3931. return f32[0];
  3932. };
  3933. } else {
  3934. fround = jsFround;
  3935. }
  3936. function cbrt(x) {
  3937. x = +x;
  3938. if (x === 0)
  3939. return x;
  3940. var negate = x < 0;
  3941. if (negate)
  3942. x = -x;
  3943. var result = pow(x, 1 / 3);
  3944. return negate ? -result : result;
  3945. }
  3946. function polyfillMath(global) {
  3947. var Math = global.Math;
  3948. maybeAddFunctions(Math, ['acosh', acosh, 'asinh', asinh, 'atanh', atanh, 'cbrt', cbrt, 'clz32', clz32, 'cosh', cosh, 'expm1', expm1, 'fround', fround, 'hypot', hypot, 'imul', imul, 'log10', log10, 'log1p', log1p, 'log2', log2, 'sign', sign, 'sinh', sinh, 'tanh', tanh, 'trunc', trunc]);
  3949. }
  3950. registerPolyfill(polyfillMath);
  3951. return {
  3952. get clz32() {
  3953. return clz32;
  3954. },
  3955. get imul() {
  3956. return imul;
  3957. },
  3958. get sign() {
  3959. return sign;
  3960. },
  3961. get log10() {
  3962. return log10;
  3963. },
  3964. get log2() {
  3965. return log2;
  3966. },
  3967. get log1p() {
  3968. return log1p;
  3969. },
  3970. get expm1() {
  3971. return expm1;
  3972. },
  3973. get cosh() {
  3974. return cosh;
  3975. },
  3976. get sinh() {
  3977. return sinh;
  3978. },
  3979. get tanh() {
  3980. return tanh;
  3981. },
  3982. get acosh() {
  3983. return acosh;
  3984. },
  3985. get asinh() {
  3986. return asinh;
  3987. },
  3988. get atanh() {
  3989. return atanh;
  3990. },
  3991. get hypot() {
  3992. return hypot;
  3993. },
  3994. get trunc() {
  3995. return trunc;
  3996. },
  3997. get fround() {
  3998. return fround;
  3999. },
  4000. get cbrt() {
  4001. return cbrt;
  4002. },
  4003. get polyfillMath() {
  4004. return polyfillMath;
  4005. }
  4006. };
  4007. });
  4008. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Math.js" + '');
  4009. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/WeakMap.js", [], function() {
  4010. "use strict";
  4011. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/WeakMap.js";
  4012. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")),
  4013. createPrivateSymbol = $__5.createPrivateSymbol,
  4014. deletePrivate = $__5.deletePrivate,
  4015. getPrivate = $__5.getPrivate,
  4016. hasPrivate = $__5.hasPrivate,
  4017. setPrivate = $__5.setPrivate;
  4018. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")),
  4019. deleteFrozen = $__6.deleteFrozen,
  4020. getFrozen = $__6.getFrozen,
  4021. hasFrozen = $__6.hasFrozen,
  4022. setFrozen = $__6.setFrozen;
  4023. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")),
  4024. isObject = $__7.isObject,
  4025. registerPolyfill = $__7.registerPolyfill;
  4026. var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")).default;
  4027. var $__2 = Object,
  4028. defineProperty = $__2.defineProperty,
  4029. getOwnPropertyDescriptor = $__2.getOwnPropertyDescriptor,
  4030. isExtensible = $__2.isExtensible;
  4031. var $TypeError = TypeError;
  4032. var hasOwnProperty = Object.prototype.hasOwnProperty;
  4033. var sentinel = {};
  4034. var WeakMap = function() {
  4035. function WeakMap() {
  4036. this.name_ = createPrivateSymbol();
  4037. this.frozenData_ = [];
  4038. }
  4039. return ($traceurRuntime.createClass)(WeakMap, {
  4040. set: function(key, value) {
  4041. if (!isObject(key))
  4042. throw new $TypeError('key must be an object');
  4043. if (!isExtensible(key)) {
  4044. setFrozen(this.frozenData_, key, value);
  4045. } else {
  4046. setPrivate(key, this.name_, value);
  4047. }
  4048. return this;
  4049. },
  4050. get: function(key) {
  4051. if (!isObject(key))
  4052. return undefined;
  4053. if (!isExtensible(key)) {
  4054. return getFrozen(this.frozenData_, key);
  4055. }
  4056. return getPrivate(key, this.name_);
  4057. },
  4058. delete: function(key) {
  4059. if (!isObject(key))
  4060. return false;
  4061. if (!isExtensible(key)) {
  4062. return deleteFrozen(this.frozenData_, key);
  4063. }
  4064. return deletePrivate(key, this.name_);
  4065. },
  4066. has: function(key) {
  4067. if (!isObject(key))
  4068. return false;
  4069. if (!isExtensible(key)) {
  4070. return hasFrozen(this.frozenData_, key);
  4071. }
  4072. return hasPrivate(key, this.name_);
  4073. }
  4074. }, {});
  4075. }();
  4076. function needsPolyfill(global) {
  4077. var $__4 = global,
  4078. WeakMap = $__4.WeakMap,
  4079. Symbol = $__4.Symbol;
  4080. if (!WeakMap || !hasNativeSymbol()) {
  4081. return true;
  4082. }
  4083. try {
  4084. var o = {};
  4085. var wm = new WeakMap([[o, false]]);
  4086. return wm.get(o);
  4087. } catch (e) {
  4088. return false;
  4089. }
  4090. }
  4091. function polyfillWeakMap(global) {
  4092. if (needsPolyfill(global)) {
  4093. global.WeakMap = WeakMap;
  4094. }
  4095. }
  4096. registerPolyfill(polyfillWeakMap);
  4097. return {
  4098. get WeakMap() {
  4099. return WeakMap;
  4100. },
  4101. get polyfillWeakMap() {
  4102. return polyfillWeakMap;
  4103. }
  4104. };
  4105. });
  4106. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/WeakMap.js" + '');
  4107. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/WeakSet.js", [], function() {
  4108. "use strict";
  4109. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/WeakSet.js";
  4110. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")),
  4111. createPrivateSymbol = $__5.createPrivateSymbol,
  4112. deletePrivate = $__5.deletePrivate,
  4113. getPrivate = $__5.getPrivate,
  4114. hasPrivate = $__5.hasPrivate,
  4115. setPrivate = $__5.setPrivate;
  4116. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")),
  4117. deleteFrozen = $__6.deleteFrozen,
  4118. getFrozen = $__6.getFrozen,
  4119. setFrozen = $__6.setFrozen;
  4120. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")),
  4121. isObject = $__7.isObject,
  4122. registerPolyfill = $__7.registerPolyfill;
  4123. var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")).default;
  4124. var $__2 = Object,
  4125. defineProperty = $__2.defineProperty,
  4126. isExtensible = $__2.isExtensible;
  4127. var $TypeError = TypeError;
  4128. var hasOwnProperty = Object.prototype.hasOwnProperty;
  4129. var WeakSet = function() {
  4130. function WeakSet() {
  4131. this.name_ = createPrivateSymbol();
  4132. this.frozenData_ = [];
  4133. }
  4134. return ($traceurRuntime.createClass)(WeakSet, {
  4135. add: function(value) {
  4136. if (!isObject(value))
  4137. throw new $TypeError('value must be an object');
  4138. if (!isExtensible(value)) {
  4139. setFrozen(this.frozenData_, value, value);
  4140. } else {
  4141. setPrivate(value, this.name_, true);
  4142. }
  4143. return this;
  4144. },
  4145. delete: function(value) {
  4146. if (!isObject(value))
  4147. return false;
  4148. if (!isExtensible(value)) {
  4149. return deleteFrozen(this.frozenData_, value);
  4150. }
  4151. return deletePrivate(value, this.name_);
  4152. },
  4153. has: function(value) {
  4154. if (!isObject(value))
  4155. return false;
  4156. if (!isExtensible(value)) {
  4157. return getFrozen(this.frozenData_, value) === value;
  4158. }
  4159. return hasPrivate(value, this.name_);
  4160. }
  4161. }, {});
  4162. }();
  4163. function needsPolyfill(global) {
  4164. var $__4 = global,
  4165. WeakSet = $__4.WeakSet,
  4166. Symbol = $__4.Symbol;
  4167. if (!WeakSet || !hasNativeSymbol()) {
  4168. return true;
  4169. }
  4170. try {
  4171. var o = {};
  4172. var wm = new WeakSet([[o]]);
  4173. return !wm.has(o);
  4174. } catch (e) {
  4175. return false;
  4176. }
  4177. }
  4178. function polyfillWeakSet(global) {
  4179. if (needsPolyfill(global)) {
  4180. global.WeakSet = WeakSet;
  4181. }
  4182. }
  4183. registerPolyfill(polyfillWeakSet);
  4184. return {
  4185. get WeakSet() {
  4186. return WeakSet;
  4187. },
  4188. get polyfillWeakSet() {
  4189. return polyfillWeakSet;
  4190. }
  4191. };
  4192. });
  4193. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/WeakSet.js" + '');
  4194. $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/polyfills.js", [], function() {
  4195. "use strict";
  4196. var __moduleName = "traceur@0.0.112/src/runtime/polyfills/polyfills.js";
  4197. var polyfillAll = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/polyfills.js")).polyfillAll;
  4198. polyfillAll(Reflect.global);
  4199. var setupGlobals = $traceurRuntime.setupGlobals;
  4200. $traceurRuntime.setupGlobals = function(global) {
  4201. setupGlobals(global);
  4202. polyfillAll(global);
  4203. };
  4204. return {};
  4205. });
  4206. $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/polyfills.js" + '');
  4207. $traceurRuntime.registerModule("traceur@0.0.112/src/util/SourceRange.js", [], function() {
  4208. "use strict";
  4209. var __moduleName = "traceur@0.0.112/src/util/SourceRange.js";
  4210. var SourceRange = function() {
  4211. function SourceRange(start, end) {
  4212. this.start = start;
  4213. this.end = end;
  4214. }
  4215. return ($traceurRuntime.createClass)(SourceRange, {toString: function() {
  4216. var str = this.start.source.contents;
  4217. return str.slice(this.start.offset, this.end.offset);
  4218. }}, {});
  4219. }();
  4220. return {get SourceRange() {
  4221. return SourceRange;
  4222. }};
  4223. });
  4224. $traceurRuntime.registerModule("traceur@0.0.112/src/util/ErrorReporter.js", [], function() {
  4225. "use strict";
  4226. var __moduleName = "traceur@0.0.112/src/util/ErrorReporter.js";
  4227. var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SourceRange.js", "traceur@0.0.112/src/util/ErrorReporter.js")).SourceRange;
  4228. var ErrorReporter = function() {
  4229. function ErrorReporter() {
  4230. this.hadError_ = false;
  4231. }
  4232. return ($traceurRuntime.createClass)(ErrorReporter, {
  4233. reportError: function(location, message) {
  4234. this.hadError_ = true;
  4235. this.reportMessageInternal(location, message);
  4236. },
  4237. reportMessageInternal: function(location, message) {
  4238. if (location)
  4239. message = (location.start + ": " + message);
  4240. console.error(message);
  4241. },
  4242. hadError: function() {
  4243. return this.hadError_;
  4244. },
  4245. clearError: function() {
  4246. this.hadError_ = false;
  4247. }
  4248. }, {});
  4249. }();
  4250. function format(location, text) {
  4251. var args = arguments[2];
  4252. var i = 0;
  4253. text = text.replace(/%./g, function(s) {
  4254. switch (s) {
  4255. case '%s':
  4256. return args && args[i++];
  4257. case '%%':
  4258. return '%';
  4259. }
  4260. return s;
  4261. });
  4262. if (location)
  4263. text = (location + ": " + text);
  4264. return text;
  4265. }
  4266. ;
  4267. ErrorReporter.format = format;
  4268. return {
  4269. get ErrorReporter() {
  4270. return ErrorReporter;
  4271. },
  4272. get format() {
  4273. return format;
  4274. }
  4275. };
  4276. });
  4277. $traceurRuntime.registerModule("traceur@0.0.112/src/util/MutedErrorReporter.js", [], function() {
  4278. "use strict";
  4279. var __moduleName = "traceur@0.0.112/src/util/MutedErrorReporter.js";
  4280. var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ErrorReporter.js", "traceur@0.0.112/src/util/MutedErrorReporter.js")).ErrorReporter;
  4281. var MutedErrorReporter = function($__super) {
  4282. function MutedErrorReporter() {
  4283. $traceurRuntime.superConstructor(MutedErrorReporter).apply(this, arguments);
  4284. }
  4285. return ($traceurRuntime.createClass)(MutedErrorReporter, {reportMessageInternal: function(location, format, args) {}}, {}, $__super);
  4286. }(ErrorReporter);
  4287. return {get MutedErrorReporter() {
  4288. return MutedErrorReporter;
  4289. }};
  4290. });
  4291. $traceurRuntime.registerModule("traceur@0.0.112/src/Options.js", [], function() {
  4292. "use strict";
  4293. var __moduleName = "traceur@0.0.112/src/Options.js";
  4294. function enumerableOnlyObject(obj) {
  4295. var result = Object.create(null);
  4296. Object.keys(obj).forEach(function(key) {
  4297. Object.defineProperty(result, key, {
  4298. enumerable: true,
  4299. value: obj[key]
  4300. });
  4301. });
  4302. return result;
  4303. }
  4304. var optionsV01 = enumerableOnlyObject({
  4305. annotations: false,
  4306. arrayComprehension: false,
  4307. arrowFunctions: true,
  4308. asyncFunctions: false,
  4309. asyncGenerators: false,
  4310. blockBinding: true,
  4311. classes: true,
  4312. commentCallback: false,
  4313. computedPropertyNames: true,
  4314. debug: false,
  4315. debugNames: false,
  4316. defaultParameters: true,
  4317. destructuring: true,
  4318. exponentiation: false,
  4319. exportFromExtended: false,
  4320. forOf: true,
  4321. forOn: false,
  4322. freeVariableChecker: false,
  4323. generatorComprehension: false,
  4324. generators: true,
  4325. importRuntime: false,
  4326. inputSourceMap: false,
  4327. jsx: false,
  4328. lowResolutionSourceMap: false,
  4329. memberVariables: false,
  4330. moduleName: 'default',
  4331. modules: 'bootstrap',
  4332. numericLiterals: true,
  4333. outputLanguage: 'es5',
  4334. properTailCalls: false,
  4335. propertyMethods: true,
  4336. propertyNameShorthand: true,
  4337. referrer: '',
  4338. require: false,
  4339. restParameters: true,
  4340. script: false,
  4341. sourceMaps: false,
  4342. sourceRoot: false,
  4343. spread: true,
  4344. spreadProperties: false,
  4345. symbols: true,
  4346. templateLiterals: true,
  4347. types: false,
  4348. unicodeEscapeSequences: true,
  4349. unicodeExpressions: true,
  4350. validate: false
  4351. });
  4352. var versionLockedOptions = optionsV01;
  4353. var defaultValues = Object.create(null);
  4354. var featureOptions = Object.create(null);
  4355. var experimentalOptions = Object.create(null);
  4356. var moduleOptions = ['amd', 'commonjs', 'closure', 'instantiate', 'inline', 'bootstrap', 'parse'];
  4357. var EXPERIMENTAL = 0;
  4358. var ON_BY_DEFAULT = 1;
  4359. function addFeatureOption(name, kind) {
  4360. featureOptions[name] = true;
  4361. if (kind === EXPERIMENTAL)
  4362. experimentalOptions[name] = true;
  4363. var defaultValue = kind === ON_BY_DEFAULT;
  4364. defaultValues[name] = defaultValue;
  4365. }
  4366. function addBoolOption(name) {
  4367. defaultValues[name] = false;
  4368. }
  4369. addFeatureOption('arrowFunctions', ON_BY_DEFAULT);
  4370. addFeatureOption('blockBinding', ON_BY_DEFAULT);
  4371. addFeatureOption('classes', ON_BY_DEFAULT);
  4372. addFeatureOption('computedPropertyNames', ON_BY_DEFAULT);
  4373. addFeatureOption('defaultParameters', ON_BY_DEFAULT);
  4374. addFeatureOption('destructuring', ON_BY_DEFAULT);
  4375. addFeatureOption('forOf', ON_BY_DEFAULT);
  4376. addFeatureOption('generators', ON_BY_DEFAULT);
  4377. addFeatureOption('modules', 'SPECIAL');
  4378. addFeatureOption('numericLiterals', ON_BY_DEFAULT);
  4379. addFeatureOption('propertyMethods', ON_BY_DEFAULT);
  4380. addFeatureOption('propertyNameShorthand', ON_BY_DEFAULT);
  4381. addFeatureOption('restParameters', ON_BY_DEFAULT);
  4382. addFeatureOption('sourceMaps', 'SPECIAL');
  4383. addFeatureOption('spread', ON_BY_DEFAULT);
  4384. addFeatureOption('symbols', ON_BY_DEFAULT);
  4385. addFeatureOption('templateLiterals', ON_BY_DEFAULT);
  4386. addFeatureOption('unicodeEscapeSequences', ON_BY_DEFAULT);
  4387. addFeatureOption('unicodeExpressions', ON_BY_DEFAULT);
  4388. addFeatureOption('properTailCalls', EXPERIMENTAL);
  4389. addFeatureOption('annotations', EXPERIMENTAL);
  4390. addFeatureOption('arrayComprehension', EXPERIMENTAL);
  4391. addFeatureOption('asyncFunctions', EXPERIMENTAL);
  4392. addFeatureOption('asyncGenerators', EXPERIMENTAL);
  4393. addFeatureOption('exponentiation', EXPERIMENTAL);
  4394. addFeatureOption('exportFromExtended', EXPERIMENTAL);
  4395. addFeatureOption('forOn', EXPERIMENTAL);
  4396. addFeatureOption('generatorComprehension', EXPERIMENTAL);
  4397. addFeatureOption('importRuntime', EXPERIMENTAL);
  4398. addFeatureOption('jsx', EXPERIMENTAL);
  4399. addFeatureOption('memberVariables', EXPERIMENTAL);
  4400. addFeatureOption('require', EXPERIMENTAL);
  4401. addFeatureOption('spreadProperties', EXPERIMENTAL);
  4402. addFeatureOption('types', EXPERIMENTAL);
  4403. var transformOptionsPrototype = {};
  4404. Object.keys(featureOptions).forEach(function(name) {
  4405. Object.defineProperty(transformOptionsPrototype, name, {
  4406. get: function() {
  4407. var v = this.proxiedOptions_[name];
  4408. if (v === 'parse')
  4409. return false;
  4410. return v;
  4411. },
  4412. enumerable: true
  4413. });
  4414. });
  4415. var parseOptionsPrototype = {};
  4416. Object.keys(featureOptions).forEach(function(name) {
  4417. Object.defineProperty(parseOptionsPrototype, name, {
  4418. get: function() {
  4419. return !!this.proxiedOptions_[name];
  4420. },
  4421. enumerable: true
  4422. });
  4423. });
  4424. addBoolOption('commentCallback');
  4425. addBoolOption('debug');
  4426. addBoolOption('debugNames');
  4427. addBoolOption('freeVariableChecker');
  4428. addBoolOption('script');
  4429. addBoolOption('validate');
  4430. var Options = function() {
  4431. function Options() {
  4432. var options = arguments[0] !== (void 0) ? arguments[0] : Object.create(null);
  4433. this.reset();
  4434. Object.defineProperties(this, {
  4435. modules_: {
  4436. value: versionLockedOptions.modules,
  4437. writable: true,
  4438. enumerable: false
  4439. },
  4440. sourceMaps_: {
  4441. value: versionLockedOptions.sourceMaps,
  4442. writable: true,
  4443. enumerable: false
  4444. },
  4445. sourceRoot_: {
  4446. value: versionLockedOptions.sourceRoot,
  4447. writable: true,
  4448. enumerable: false
  4449. },
  4450. transformOptions: {
  4451. value: Object.create(transformOptionsPrototype, {proxiedOptions_: {
  4452. value: this,
  4453. enumerable: false
  4454. }}),
  4455. enumerable: false
  4456. },
  4457. parseOptions: {
  4458. value: Object.create(parseOptionsPrototype, {proxiedOptions_: {
  4459. value: this,
  4460. enumerable: false
  4461. }}),
  4462. enumerable: false
  4463. }
  4464. });
  4465. this.setFromObject(options);
  4466. }
  4467. return ($traceurRuntime.createClass)(Options, {
  4468. set experimental(v) {
  4469. var $__2 = this;
  4470. v = coerceOptionValue(v);
  4471. Object.keys(experimentalOptions).forEach(function(name) {
  4472. $__2[name] = v;
  4473. });
  4474. },
  4475. get experimental() {
  4476. var $__2 = this;
  4477. var value;
  4478. Object.keys(experimentalOptions).every(function(name) {
  4479. var currentValue = $__2[name];
  4480. if (value === undefined) {
  4481. value = currentValue;
  4482. return true;
  4483. }
  4484. if (currentValue !== value) {
  4485. value = null;
  4486. return false;
  4487. }
  4488. return true;
  4489. });
  4490. return value;
  4491. },
  4492. get atscript() {
  4493. return this.types && this.annotations && this.memberVariables;
  4494. },
  4495. set atscript(value) {
  4496. this.types = value;
  4497. this.annotations = value;
  4498. this.memberVariables = value;
  4499. },
  4500. get modules() {
  4501. return this.modules_;
  4502. },
  4503. set modules(value) {
  4504. if (typeof value === 'boolean' && !value)
  4505. value = 'bootstrap';
  4506. if (moduleOptions.indexOf(value) === -1) {
  4507. throw new Error('Invalid \'modules\' option \'' + value + '\', not in ' + moduleOptions.join(', '));
  4508. }
  4509. this.modules_ = value;
  4510. },
  4511. get sourceMaps() {
  4512. return this.sourceMaps_;
  4513. },
  4514. set sourceMaps(value) {
  4515. if (value === null || typeof value === 'boolean') {
  4516. this.sourceMaps_ = value ? 'file' : false;
  4517. return;
  4518. }
  4519. if (value === 'file' || value === 'inline' || value === 'memory') {
  4520. this.sourceMaps_ = value;
  4521. } else {
  4522. throw new Error('Option sourceMaps should be ' + '[false|inline|file|memory], not ' + value);
  4523. }
  4524. },
  4525. reset: function() {
  4526. var allOff = arguments[0];
  4527. var $__2 = this;
  4528. var useDefault = allOff === undefined;
  4529. Object.keys(defaultValues).forEach(function(name) {
  4530. $__2[name] = useDefault && defaultValues[name];
  4531. });
  4532. this.setDefaults();
  4533. },
  4534. setDefaults: function() {
  4535. this.modules = 'bootstrap';
  4536. this.moduleName = 'default';
  4537. this.outputLanguage = 'es5';
  4538. this.referrer = '';
  4539. this.sourceMaps = false;
  4540. this.sourceRoot = false;
  4541. this.lowResolutionSourceMap = false;
  4542. this.inputSourceMap = false;
  4543. },
  4544. setFromObject: function(object) {
  4545. var $__2 = this;
  4546. Object.keys(this).forEach(function(name) {
  4547. if (name in object)
  4548. $__2.setOption(name, object[name]);
  4549. });
  4550. this.modules = object.modules || this.modules;
  4551. if (typeof object.sourceMaps === 'boolean' || typeof object.sourceMaps === 'string') {
  4552. this.sourceMaps = object.sourceMaps;
  4553. }
  4554. if (object.sourceRoot !== undefined)
  4555. this.sourceRoot = object.sourceRoot;
  4556. return this;
  4557. },
  4558. setOption: function(name, value) {
  4559. name = toCamelCase(name);
  4560. if (name in this) {
  4561. this[name] = value;
  4562. } else {
  4563. throw Error('Unknown option: ' + name);
  4564. }
  4565. },
  4566. diff: function(ref) {
  4567. var $__2 = this;
  4568. var mismatches = [];
  4569. Object.keys(this).forEach(function(key) {
  4570. if ($__2[key] !== ref[key]) {
  4571. mismatches.push({
  4572. key: key,
  4573. now: $traceurRuntime.options[key],
  4574. v01: ref[key]
  4575. });
  4576. }
  4577. });
  4578. return mismatches;
  4579. }
  4580. }, {
  4581. experimental: function() {
  4582. return new Options(experimentalOptions);
  4583. },
  4584. atscript: function() {
  4585. return new Options({
  4586. types: true,
  4587. annotations: true,
  4588. memberVariables: true
  4589. });
  4590. },
  4591. listUnknownOptions: function(obj) {
  4592. var unknowns = [];
  4593. Object.keys(obj).forEach(function(propName) {
  4594. if (!(propName in optionsV01)) {
  4595. unknowns.push(propName);
  4596. }
  4597. });
  4598. return unknowns;
  4599. }
  4600. });
  4601. }();
  4602. ;
  4603. var descriptions = {
  4604. experimental: 'Turns on all experimental features',
  4605. require: 'Generate require function argument for node when modules=register',
  4606. sourceMaps: 'Generate source map and (\'file\') write to .map' + ' or (\'inline\') append data URL'
  4607. };
  4608. var CommandOptions = function($__super) {
  4609. function CommandOptions() {
  4610. $traceurRuntime.superConstructor(CommandOptions).apply(this, arguments);
  4611. }
  4612. return ($traceurRuntime.createClass)(CommandOptions, {
  4613. parseCommand: function(s) {
  4614. var re = /--([^=]+)(?:=(.+))?/;
  4615. var m = re.exec(s);
  4616. if (m)
  4617. this.setOptionCoerced(m[1], m[2]);
  4618. },
  4619. setOptionCoerced: function(name, value) {
  4620. if (typeof value !== 'undefined' && value !== null)
  4621. value = coerceOptionValue(value);
  4622. else
  4623. value = true;
  4624. this.setOption(name, value);
  4625. }
  4626. }, {
  4627. fromString: function(s) {
  4628. return CommandOptions.fromArgv(s.split(/\s+/));
  4629. },
  4630. fromArgv: function(args) {
  4631. var options = new CommandOptions();
  4632. args.forEach(function(arg) {
  4633. return options.parseCommand(arg);
  4634. });
  4635. return options;
  4636. }
  4637. }, $__super);
  4638. }(Options);
  4639. function coerceOptionValue(v) {
  4640. switch (v) {
  4641. case 'false':
  4642. return false;
  4643. case 'true':
  4644. case true:
  4645. return true;
  4646. default:
  4647. return !!v && String(v);
  4648. }
  4649. }
  4650. function toCamelCase(s) {
  4651. return s.replace(/-\w/g, function(ch) {
  4652. return ch[1].toUpperCase();
  4653. });
  4654. }
  4655. function toDashCase(s) {
  4656. return s.replace(/[A-Z]/g, function(ch) {
  4657. return '-' + ch.toLowerCase();
  4658. });
  4659. }
  4660. function addOptions(flags, commandOptions) {
  4661. flags.option('--referrer <name>', 'Bracket output code with System.referrerName=<name>', function(name) {
  4662. commandOptions.setOption('referrer', name);
  4663. System.map = System.semverMap(name);
  4664. return name;
  4665. });
  4666. flags.option('--modules <' + moduleOptions.join(', ') + '>', 'select the output format for modules', function(moduleFormat) {
  4667. commandOptions.modules = moduleFormat;
  4668. });
  4669. flags.option('--moduleName [true|false|default]', 'true for named, false for anonymous modules; default depends on --modules', function(moduleName) {
  4670. if (moduleName === 'true')
  4671. moduleName = true;
  4672. else if (moduleName === 'false')
  4673. moduleName = false;
  4674. else
  4675. moduleName = 'default';
  4676. commandOptions.moduleName = moduleName;
  4677. });
  4678. flags.option('--outputLanguage <es6|es5>', 'compilation target language', function(outputLanguage) {
  4679. if (outputLanguage === 'es6' || outputLanguage === 'es5')
  4680. commandOptions.outputLanguage = outputLanguage;
  4681. else
  4682. throw new Error('outputLanguage must be one of es5, es6');
  4683. });
  4684. flags.option('--source-maps [file|inline|memory]', 'sourceMaps generated to file or inline with data: URL', function(to) {
  4685. return commandOptions.sourceMaps = to;
  4686. });
  4687. flags.option('--source-root <true|false|string>', 'sourcemap sourceRoot value. false to omit, ' + 'true for directory of output file.', function(to) {
  4688. if (to === 'false')
  4689. to = false;
  4690. else if (to === 'true')
  4691. to = true;
  4692. return commandOptions.sourceRoot = to;
  4693. });
  4694. flags.option('--low-resolution-source-maps', 'Lower sourceMaps granularity to one mapping per output line', function() {
  4695. return commandOptions.lowResolutionSourceMap = true;
  4696. });
  4697. flags.option('--experimental', 'Turns on all experimental features', function() {
  4698. commandOptions.experimental = true;
  4699. });
  4700. flags.option('--atscript', 'Turns on all AtScript features', function() {
  4701. commandOptions.atscript = true;
  4702. });
  4703. Object.keys(commandOptions).forEach(function(name) {
  4704. var dashedName = toDashCase(name);
  4705. if (flags.optionFor('--' + name) || flags.optionFor('--' + dashedName)) {
  4706. return;
  4707. } else if (name in featureOptions) {
  4708. flags.option('--' + dashedName + ' [true|false|parse]', descriptions[name]);
  4709. flags.on(dashedName, function(value) {
  4710. return commandOptions.setOptionCoerced(dashedName, value);
  4711. });
  4712. } else if (commandOptions[name] !== null) {
  4713. flags.option('--' + dashedName, descriptions[name]);
  4714. flags.on(dashedName, function() {
  4715. return commandOptions.setOption(dashedName, true);
  4716. });
  4717. } else {
  4718. throw new Error('Unexpected null commandOption ' + name);
  4719. }
  4720. });
  4721. commandOptions.setDefaults();
  4722. }
  4723. return {
  4724. get optionsV01() {
  4725. return optionsV01;
  4726. },
  4727. get versionLockedOptions() {
  4728. return versionLockedOptions;
  4729. },
  4730. get Options() {
  4731. return Options;
  4732. },
  4733. get CommandOptions() {
  4734. return CommandOptions;
  4735. },
  4736. get toDashCase() {
  4737. return toDashCase;
  4738. },
  4739. get addOptions() {
  4740. return addOptions;
  4741. }
  4742. };
  4743. });
  4744. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/webLoader.js", [], function() {
  4745. "use strict";
  4746. var __moduleName = "traceur@0.0.112/src/loader/webLoader.js";
  4747. var webLoader = {load: function(url, callback, errback) {
  4748. var xhr = new XMLHttpRequest();
  4749. xhr.onload = function() {
  4750. if (xhr.status == 200 || xhr.status == 0) {
  4751. callback(xhr.responseText);
  4752. } else {
  4753. var err;
  4754. if (xhr.status === 404)
  4755. err = 'File not found \'' + url + '\'';
  4756. else
  4757. err = xhr.status + xhr.statusText;
  4758. errback(err);
  4759. }
  4760. xhr = null;
  4761. };
  4762. xhr.onerror = function(err) {
  4763. errback(err);
  4764. };
  4765. xhr.open('GET', url, true);
  4766. xhr.send();
  4767. return function() {
  4768. xhr && xhr.abort();
  4769. };
  4770. }};
  4771. return {get webLoader() {
  4772. return webLoader;
  4773. }};
  4774. });
  4775. $traceurRuntime.registerModule("traceur@0.0.112/src/WebPageTranscoder.js", [], function() {
  4776. "use strict";
  4777. var __moduleName = "traceur@0.0.112/src/WebPageTranscoder.js";
  4778. var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/ErrorReporter.js", "traceur@0.0.112/src/WebPageTranscoder.js")).ErrorReporter;
  4779. var CommandOptions = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/WebPageTranscoder.js")).CommandOptions;
  4780. var webLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./loader/webLoader.js", "traceur@0.0.112/src/WebPageTranscoder.js")).webLoader;
  4781. var scriptSelector = 'script[type="module"],script[type="text/traceur"]';
  4782. var WebPageTranscoder = function() {
  4783. function WebPageTranscoder() {
  4784. var url = arguments[0] !== (void 0) ? arguments[0] : document.location.href;
  4785. var traceurOptions = arguments[1] !== (void 0) ? arguments[1] : new Options();
  4786. this.url = url;
  4787. this.numPending_ = 0;
  4788. this.numberInlined_ = 0;
  4789. this.traceurOptions_ = traceurOptions;
  4790. }
  4791. return ($traceurRuntime.createClass)(WebPageTranscoder, {
  4792. asyncLoad_: function(url, fncOfContent, onScriptsReady) {
  4793. var $__3 = this;
  4794. this.numPending_++;
  4795. webLoader.load(url, function(content) {
  4796. if (content)
  4797. fncOfContent(content);
  4798. else
  4799. console.warn('Failed to load', url);
  4800. if (--$__3.numPending_ <= 0)
  4801. onScriptsReady();
  4802. }, function(error) {
  4803. console.error('WebPageTranscoder FAILED to load ' + url, error.stack || error);
  4804. });
  4805. },
  4806. addFileFromScriptElement: function(scriptElement, name, content) {
  4807. var options = this.traceurOptions_;
  4808. var elementOptionString = scriptElement.getAttribute('traceurOptions');
  4809. if (elementOptionString) {
  4810. options = CommandOptions.fromString(elementOptionString);
  4811. }
  4812. var nameInfo = {
  4813. address: name,
  4814. referrerName: window.location.href,
  4815. name: name,
  4816. metadata: {traceurOptions: options}
  4817. };
  4818. var loadingResult;
  4819. if (scriptElement.type === 'module')
  4820. loadingResult = System.module(content, nameInfo);
  4821. else
  4822. loadingResult = System.script(content, nameInfo);
  4823. loadingResult.catch(function(error) {
  4824. console.error(error.stack || error);
  4825. });
  4826. },
  4827. nextInlineScriptName_: function() {
  4828. this.numberInlined_ += 1;
  4829. if (!this.inlineScriptNameBase_) {
  4830. var segments = this.url.split('.');
  4831. segments.pop();
  4832. this.inlineScriptNameBase_ = segments.join('.');
  4833. }
  4834. return this.inlineScriptNameBase_ + '_inline_script_' + this.numberInlined_ + '.js';
  4835. },
  4836. addFilesFromScriptElements: function(scriptElements, onScriptsReady) {
  4837. for (var i = 0,
  4838. length = scriptElements.length; i < length; i++) {
  4839. var scriptElement = scriptElements[i];
  4840. if (!scriptElement.src) {
  4841. var name = this.nextInlineScriptName_();
  4842. var content = scriptElement.textContent;
  4843. this.addFileFromScriptElement(scriptElement, name, content);
  4844. } else {
  4845. var name$__4 = scriptElement.src;
  4846. this.asyncLoad_(name$__4, this.addFileFromScriptElement.bind(this, scriptElement, name$__4), onScriptsReady);
  4847. }
  4848. }
  4849. if (this.numPending_ <= 0)
  4850. onScriptsReady();
  4851. },
  4852. get reporter() {
  4853. if (!this.reporter_) {
  4854. this.reporter_ = new ErrorReporter();
  4855. }
  4856. return this.reporter_;
  4857. },
  4858. putFile: function(file) {
  4859. var scriptElement = document.createElement('script');
  4860. scriptElement.setAttribute('data-traceur-src-url', file.name);
  4861. scriptElement.textContent = file.generatedSource;
  4862. var parent = file.scriptElement.parentNode;
  4863. parent.insertBefore(scriptElement, file.scriptElement || null);
  4864. },
  4865. selectAndProcessScripts: function(done) {
  4866. var selector = scriptSelector;
  4867. var scripts = document.querySelectorAll(selector);
  4868. if (!scripts.length) {
  4869. done();
  4870. return;
  4871. }
  4872. this.addFilesFromScriptElements(scripts, function() {
  4873. done();
  4874. });
  4875. },
  4876. run: function() {
  4877. var done = arguments[0] !== (void 0) ? arguments[0] : function() {};
  4878. var $__3 = this;
  4879. var ready = document.readyState;
  4880. if (ready === 'complete' || ready === 'loaded') {
  4881. this.selectAndProcessScripts(done);
  4882. } else {
  4883. document.addEventListener('DOMContentLoaded', function() {
  4884. return $__3.selectAndProcessScripts(done);
  4885. }, false);
  4886. }
  4887. }
  4888. }, {});
  4889. }();
  4890. return {
  4891. get scriptSelector() {
  4892. return scriptSelector;
  4893. },
  4894. get WebPageTranscoder() {
  4895. return WebPageTranscoder;
  4896. }
  4897. };
  4898. });
  4899. $traceurRuntime.registerModule("traceur@0.0.112/src/util/StringSet.js", [], function() {
  4900. "use strict";
  4901. var __moduleName = "traceur@0.0.112/src/util/StringSet.js";
  4902. function assertString(value) {
  4903. if (typeof value !== 'string')
  4904. throw new TypeError();
  4905. }
  4906. var StringSet = function() {
  4907. function StringSet() {
  4908. this.storage_ = Object.create(null);
  4909. }
  4910. return ($traceurRuntime.createClass)(StringSet, {
  4911. add: function(value) {
  4912. assertString(value);
  4913. this.storage_[value] = true;
  4914. },
  4915. has: function(value) {
  4916. assertString(value);
  4917. return this.storage_[value] !== undefined;
  4918. },
  4919. delete: function(value) {
  4920. assertString(value);
  4921. delete this.storage_[value];
  4922. },
  4923. isEmpty: function() {
  4924. for (var _ in this.storage_) {
  4925. return false;
  4926. }
  4927. return true;
  4928. },
  4929. valuesAsArray: function() {
  4930. return Object.keys(this.storage_);
  4931. },
  4932. forEach: function(func) {
  4933. for (var value in this.storage_) {
  4934. func(value);
  4935. }
  4936. }
  4937. }, {});
  4938. }();
  4939. return {get StringSet() {
  4940. return StringSet;
  4941. }};
  4942. });
  4943. $traceurRuntime.registerModule("traceur@0.0.112/src/util/StringMap.js", [], function() {
  4944. "use strict";
  4945. var __moduleName = "traceur@0.0.112/src/util/StringMap.js";
  4946. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StringSet.js", "traceur@0.0.112/src/util/StringMap.js")).StringSet;
  4947. function assertString(value) {
  4948. if (typeof value !== 'string')
  4949. throw new TypeError();
  4950. }
  4951. var StringMap = function() {
  4952. function StringMap() {
  4953. this.storage_ = Object.create(null);
  4954. }
  4955. return ($traceurRuntime.createClass)(StringMap, {
  4956. set: function(key, value) {
  4957. assertString(key);
  4958. this.storage_[key] = value;
  4959. },
  4960. get: function(key) {
  4961. assertString(key);
  4962. return this.storage_[key];
  4963. },
  4964. delete: function(key) {
  4965. assertString(key);
  4966. delete this.storage_[key];
  4967. },
  4968. has: function(key) {
  4969. assertString(key);
  4970. return this.storage_[key] !== undefined;
  4971. },
  4972. keysAsArray: function() {
  4973. return Object.keys(this.storage_);
  4974. },
  4975. keysAsSet: function() {
  4976. var set = new StringSet();
  4977. this.forEach(function(key) {
  4978. return set.add(key);
  4979. });
  4980. return set;
  4981. },
  4982. forEach: function(func) {
  4983. for (var key in this.storage_) {
  4984. func(key, this.storage_[key]);
  4985. }
  4986. }
  4987. }, {});
  4988. }();
  4989. return {get StringMap() {
  4990. return StringMap;
  4991. }};
  4992. });
  4993. $traceurRuntime.registerModule("traceur@0.0.112/src/HTMLImportTranscoder.js", [], function() {
  4994. "use strict";
  4995. var __moduleName = "traceur@0.0.112/src/HTMLImportTranscoder.js";
  4996. var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/StringMap.js", "traceur@0.0.112/src/HTMLImportTranscoder.js")).StringMap;
  4997. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./WebPageTranscoder.js", "traceur@0.0.112/src/HTMLImportTranscoder.js")),
  4998. WebPageTranscoder = $__4.WebPageTranscoder,
  4999. scriptSelector = $__4.scriptSelector;
  5000. var importSelector = 'link[rel=import][href]';
  5001. var HTMLImportTranscoder = function() {
  5002. function HTMLImportTranscoder() {
  5003. this.importsToProcess_ = [];
  5004. }
  5005. return ($traceurRuntime.createClass)(HTMLImportTranscoder, {
  5006. findAllChildrenHTMLImports_: function(parentImportNodes) {
  5007. var foundImportNodes = [];
  5008. for (var parentIndex = 0; parentIndex < parentImportNodes.length; parentIndex++) {
  5009. var parentLink = parentImportNodes[parentIndex];
  5010. var childImportNodes = parentLink.import.querySelectorAll(importSelector);
  5011. if (childImportNodes.length > 0)
  5012. this.findAllChildrenHTMLImports_(childImportNodes);
  5013. this.importsToProcess_.push(parentLink);
  5014. }
  5015. },
  5016. filterHTMLImports_: function(importNodes) {
  5017. this.findAllChildrenHTMLImports_(importNodes);
  5018. var importsToParse = [];
  5019. var dupFilterMap = new StringMap();
  5020. for (var index = 0; index < this.importsToProcess_.length; index++) {
  5021. var processLink = this.importsToProcess_[index];
  5022. if (!dupFilterMap.has(processLink.href)) {
  5023. dupFilterMap.set(processLink.href, 0);
  5024. var scripts = processLink.import.querySelectorAll(scriptSelector);
  5025. if (scripts.length > 0)
  5026. importsToParse.push({
  5027. href: processLink.href,
  5028. scripts: scripts
  5029. });
  5030. }
  5031. }
  5032. this.importsToProcess_ = [];
  5033. return importsToParse;
  5034. },
  5035. selectAndProcessHTMLImports: function(importNodes, done) {
  5036. var importInfoList = this.filterHTMLImports_(importNodes);
  5037. if (importInfoList.length === 0)
  5038. done();
  5039. var processCount = importInfoList.length;
  5040. importInfoList.forEach(function(importInfo) {
  5041. var transcoder = new WebPageTranscoder(importInfo.href);
  5042. transcoder.addFilesFromScriptElements(importInfo.scripts, function() {
  5043. processCount--;
  5044. if (processCount === 0 && done)
  5045. done();
  5046. });
  5047. });
  5048. },
  5049. run: function() {
  5050. var done = arguments[0] !== (void 0) ? arguments[0] : function() {};
  5051. var $__2 = this;
  5052. var ready = document.readyState;
  5053. if (ready === 'complete' || ready === 'loaded') {
  5054. var importNodes = document.querySelectorAll(importSelector);
  5055. if (importNodes.length > 0)
  5056. this.selectAndProcessHTMLImports(importNodes, done);
  5057. } else {
  5058. document.addEventListener('HTMLImportsLoaded', function(event) {
  5059. var importNodes = event.detail && event.detail.allImports ? event.detail.allImports : document.querySelectorAll(importSelector);
  5060. if (importNodes.length > 0)
  5061. $__2.selectAndProcessHTMLImports(importNodes, done);
  5062. });
  5063. }
  5064. }
  5065. }, {});
  5066. }();
  5067. return {get HTMLImportTranscoder() {
  5068. return HTMLImportTranscoder;
  5069. }};
  5070. });
  5071. $traceurRuntime.registerModule("traceur@0.0.112/src/util/CollectingErrorReporter.js", [], function() {
  5072. "use strict";
  5073. var __moduleName = "traceur@0.0.112/src/util/CollectingErrorReporter.js";
  5074. var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/ErrorReporter.js", "traceur@0.0.112/src/util/CollectingErrorReporter.js")).ErrorReporter;
  5075. var MultipleErrors = function($__super) {
  5076. function MultipleErrors(errors) {
  5077. $traceurRuntime.superConstructor(MultipleErrors).call(this);
  5078. this.message = errors ? errors.join('\n') : '';
  5079. this.name = 'MultipleErrors';
  5080. this.errors = errors;
  5081. }
  5082. return ($traceurRuntime.createClass)(MultipleErrors, {}, {}, $__super);
  5083. }(Error);
  5084. var CollectingErrorReporter = function($__super) {
  5085. function CollectingErrorReporter() {
  5086. $traceurRuntime.superConstructor(CollectingErrorReporter).call(this);
  5087. this.errors = [];
  5088. }
  5089. return ($traceurRuntime.createClass)(CollectingErrorReporter, {
  5090. reportMessageInternal: function(location, message) {
  5091. this.errors.push((location.start + ": " + message));
  5092. },
  5093. errorsAsString: function() {
  5094. return this.toError().message;
  5095. },
  5096. toError: function() {
  5097. return new MultipleErrors(this.errors);
  5098. }
  5099. }, {}, $__super);
  5100. }(ErrorReporter);
  5101. return {
  5102. get MultipleErrors() {
  5103. return MultipleErrors;
  5104. },
  5105. get CollectingErrorReporter() {
  5106. return CollectingErrorReporter;
  5107. }
  5108. };
  5109. });
  5110. $traceurRuntime.registerModule("traceur@0.0.112/src/util-imports.js", [], function() {
  5111. "use strict";
  5112. var __moduleName = "traceur@0.0.112/src/util-imports.js";
  5113. $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/MutedErrorReporter.js", "traceur@0.0.112/src/util-imports.js"));
  5114. var $__traceur_64_0_46_0_46_112_47_src_47_WebPageTranscoder_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./WebPageTranscoder.js", "traceur@0.0.112/src/util-imports.js"));
  5115. var $__traceur_64_0_46_0_46_112_47_src_47_HTMLImportTranscoder_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./HTMLImportTranscoder.js", "traceur@0.0.112/src/util-imports.js"));
  5116. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/util-imports.js")),
  5117. addOptions = $__1.addOptions,
  5118. CommandOptions = $__1.CommandOptions,
  5119. Options = $__1.Options;
  5120. var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/ErrorReporter.js", "traceur@0.0.112/src/util-imports.js")).ErrorReporter;
  5121. var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/CollectingErrorReporter.js", "traceur@0.0.112/src/util-imports.js")).CollectingErrorReporter;
  5122. var util = {
  5123. addOptions: addOptions,
  5124. CommandOptions: CommandOptions,
  5125. CollectingErrorReporter: CollectingErrorReporter,
  5126. ErrorReporter: ErrorReporter,
  5127. Options: Options
  5128. };
  5129. return {
  5130. get WebPageTranscoder() {
  5131. return $__traceur_64_0_46_0_46_112_47_src_47_WebPageTranscoder_46_js__.WebPageTranscoder;
  5132. },
  5133. get HTMLImportTranscoder() {
  5134. return $__traceur_64_0_46_0_46_112_47_src_47_HTMLImportTranscoder_46_js__.HTMLImportTranscoder;
  5135. },
  5136. get util() {
  5137. return util;
  5138. }
  5139. };
  5140. });
  5141. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTreeType.js", [], function() {
  5142. "use strict";
  5143. var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTreeType.js";
  5144. var ANNOTATION = 'ANNOTATION';
  5145. var ANON_BLOCK = 'ANON_BLOCK';
  5146. var ARGUMENT_LIST = 'ARGUMENT_LIST';
  5147. var ARRAY_COMPREHENSION = 'ARRAY_COMPREHENSION';
  5148. var ARRAY_LITERAL = 'ARRAY_LITERAL';
  5149. var ARRAY_PATTERN = 'ARRAY_PATTERN';
  5150. var ARRAY_TYPE = 'ARRAY_TYPE';
  5151. var ARROW_FUNCTION = 'ARROW_FUNCTION';
  5152. var ASSIGNMENT_ELEMENT = 'ASSIGNMENT_ELEMENT';
  5153. var AWAIT_EXPRESSION = 'AWAIT_EXPRESSION';
  5154. var BINARY_EXPRESSION = 'BINARY_EXPRESSION';
  5155. var BINDING_ELEMENT = 'BINDING_ELEMENT';
  5156. var BINDING_IDENTIFIER = 'BINDING_IDENTIFIER';
  5157. var BLOCK = 'BLOCK';
  5158. var BREAK_STATEMENT = 'BREAK_STATEMENT';
  5159. var CALL_EXPRESSION = 'CALL_EXPRESSION';
  5160. var CALL_SIGNATURE = 'CALL_SIGNATURE';
  5161. var CASE_CLAUSE = 'CASE_CLAUSE';
  5162. var CATCH = 'CATCH';
  5163. var CLASS_DECLARATION = 'CLASS_DECLARATION';
  5164. var CLASS_EXPRESSION = 'CLASS_EXPRESSION';
  5165. var COMMA_EXPRESSION = 'COMMA_EXPRESSION';
  5166. var COMPREHENSION_FOR = 'COMPREHENSION_FOR';
  5167. var COMPREHENSION_IF = 'COMPREHENSION_IF';
  5168. var COMPUTED_PROPERTY_NAME = 'COMPUTED_PROPERTY_NAME';
  5169. var CONDITIONAL_EXPRESSION = 'CONDITIONAL_EXPRESSION';
  5170. var CONSTRUCT_SIGNATURE = 'CONSTRUCT_SIGNATURE';
  5171. var CONSTRUCTOR_TYPE = 'CONSTRUCTOR_TYPE';
  5172. var CONTINUE_STATEMENT = 'CONTINUE_STATEMENT';
  5173. var COVER_FORMALS = 'COVER_FORMALS';
  5174. var COVER_INITIALIZED_NAME = 'COVER_INITIALIZED_NAME';
  5175. var DEBUGGER_STATEMENT = 'DEBUGGER_STATEMENT';
  5176. var DEFAULT_CLAUSE = 'DEFAULT_CLAUSE';
  5177. var DO_WHILE_STATEMENT = 'DO_WHILE_STATEMENT';
  5178. var EMPTY_STATEMENT = 'EMPTY_STATEMENT';
  5179. var EXPORT_DECLARATION = 'EXPORT_DECLARATION';
  5180. var EXPORT_DEFAULT = 'EXPORT_DEFAULT';
  5181. var EXPORT_SPECIFIER = 'EXPORT_SPECIFIER';
  5182. var EXPORT_SPECIFIER_SET = 'EXPORT_SPECIFIER_SET';
  5183. var EXPORT_STAR = 'EXPORT_STAR';
  5184. var EXPRESSION_STATEMENT = 'EXPRESSION_STATEMENT';
  5185. var FINALLY = 'FINALLY';
  5186. var FOR_IN_STATEMENT = 'FOR_IN_STATEMENT';
  5187. var FOR_OF_STATEMENT = 'FOR_OF_STATEMENT';
  5188. var FOR_ON_STATEMENT = 'FOR_ON_STATEMENT';
  5189. var FOR_STATEMENT = 'FOR_STATEMENT';
  5190. var FORMAL_PARAMETER = 'FORMAL_PARAMETER';
  5191. var FORMAL_PARAMETER_LIST = 'FORMAL_PARAMETER_LIST';
  5192. var FORWARD_DEFAULT_EXPORT = 'FORWARD_DEFAULT_EXPORT';
  5193. var FUNCTION_BODY = 'FUNCTION_BODY';
  5194. var FUNCTION_DECLARATION = 'FUNCTION_DECLARATION';
  5195. var FUNCTION_EXPRESSION = 'FUNCTION_EXPRESSION';
  5196. var FUNCTION_TYPE = 'FUNCTION_TYPE';
  5197. var GENERATOR_COMPREHENSION = 'GENERATOR_COMPREHENSION';
  5198. var GET_ACCESSOR = 'GET_ACCESSOR';
  5199. var IDENTIFIER_EXPRESSION = 'IDENTIFIER_EXPRESSION';
  5200. var IF_STATEMENT = 'IF_STATEMENT';
  5201. var IMPORT_CLAUSE_PAIR = 'IMPORT_CLAUSE_PAIR';
  5202. var IMPORT_DECLARATION = 'IMPORT_DECLARATION';
  5203. var IMPORT_SPECIFIER = 'IMPORT_SPECIFIER';
  5204. var IMPORT_SPECIFIER_SET = 'IMPORT_SPECIFIER_SET';
  5205. var IMPORT_TYPE_CLAUSE = 'IMPORT_TYPE_CLAUSE';
  5206. var IMPORTED_BINDING = 'IMPORTED_BINDING';
  5207. var INDEX_SIGNATURE = 'INDEX_SIGNATURE';
  5208. var INTERFACE_DECLARATION = 'INTERFACE_DECLARATION';
  5209. var JSX_ATTRIBUTE = 'JSX_ATTRIBUTE';
  5210. var JSX_ELEMENT = 'JSX_ELEMENT';
  5211. var JSX_ELEMENT_NAME = 'JSX_ELEMENT_NAME';
  5212. var JSX_PLACEHOLDER = 'JSX_PLACEHOLDER';
  5213. var JSX_SPREAD_ATTRIBUTE = 'JSX_SPREAD_ATTRIBUTE';
  5214. var JSX_TEXT = 'JSX_TEXT';
  5215. var LABELLED_STATEMENT = 'LABELLED_STATEMENT';
  5216. var LITERAL_EXPRESSION = 'LITERAL_EXPRESSION';
  5217. var LITERAL_PROPERTY_NAME = 'LITERAL_PROPERTY_NAME';
  5218. var MEMBER_EXPRESSION = 'MEMBER_EXPRESSION';
  5219. var MEMBER_LOOKUP_EXPRESSION = 'MEMBER_LOOKUP_EXPRESSION';
  5220. var METHOD = 'METHOD';
  5221. var METHOD_SIGNATURE = 'METHOD_SIGNATURE';
  5222. var MODULE = 'MODULE';
  5223. var MODULE_SPECIFIER = 'MODULE_SPECIFIER';
  5224. var NAME_SPACE_EXPORT = 'NAME_SPACE_EXPORT';
  5225. var NAME_SPACE_IMPORT = 'NAME_SPACE_IMPORT';
  5226. var NAMED_EXPORT = 'NAMED_EXPORT';
  5227. var NEW_EXPRESSION = 'NEW_EXPRESSION';
  5228. var OBJECT_LITERAL = 'OBJECT_LITERAL';
  5229. var OBJECT_PATTERN = 'OBJECT_PATTERN';
  5230. var OBJECT_PATTERN_FIELD = 'OBJECT_PATTERN_FIELD';
  5231. var OBJECT_TYPE = 'OBJECT_TYPE';
  5232. var PAREN_EXPRESSION = 'PAREN_EXPRESSION';
  5233. var POSTFIX_EXPRESSION = 'POSTFIX_EXPRESSION';
  5234. var PREDEFINED_TYPE = 'PREDEFINED_TYPE';
  5235. var PROPERTY_NAME_ASSIGNMENT = 'PROPERTY_NAME_ASSIGNMENT';
  5236. var PROPERTY_NAME_SHORTHAND = 'PROPERTY_NAME_SHORTHAND';
  5237. var PROPERTY_SIGNATURE = 'PROPERTY_SIGNATURE';
  5238. var PROPERTY_VARIABLE_DECLARATION = 'PROPERTY_VARIABLE_DECLARATION';
  5239. var REST_PARAMETER = 'REST_PARAMETER';
  5240. var RETURN_STATEMENT = 'RETURN_STATEMENT';
  5241. var SCRIPT = 'SCRIPT';
  5242. var SET_ACCESSOR = 'SET_ACCESSOR';
  5243. var SPREAD_EXPRESSION = 'SPREAD_EXPRESSION';
  5244. var SPREAD_PATTERN_ELEMENT = 'SPREAD_PATTERN_ELEMENT';
  5245. var STATE_MACHINE = 'STATE_MACHINE';
  5246. var SUPER_EXPRESSION = 'SUPER_EXPRESSION';
  5247. var SWITCH_STATEMENT = 'SWITCH_STATEMENT';
  5248. var SYNTAX_ERROR_TREE = 'SYNTAX_ERROR_TREE';
  5249. var TEMPLATE_LITERAL_EXPRESSION = 'TEMPLATE_LITERAL_EXPRESSION';
  5250. var TEMPLATE_LITERAL_PORTION = 'TEMPLATE_LITERAL_PORTION';
  5251. var TEMPLATE_SUBSTITUTION = 'TEMPLATE_SUBSTITUTION';
  5252. var THIS_EXPRESSION = 'THIS_EXPRESSION';
  5253. var THROW_STATEMENT = 'THROW_STATEMENT';
  5254. var TRY_STATEMENT = 'TRY_STATEMENT';
  5255. var TYPE_ALIAS_DECLARATION = 'TYPE_ALIAS_DECLARATION';
  5256. var TYPE_ARGUMENTS = 'TYPE_ARGUMENTS';
  5257. var TYPE_NAME = 'TYPE_NAME';
  5258. var TYPE_PARAMETER = 'TYPE_PARAMETER';
  5259. var TYPE_PARAMETERS = 'TYPE_PARAMETERS';
  5260. var TYPE_REFERENCE = 'TYPE_REFERENCE';
  5261. var UNARY_EXPRESSION = 'UNARY_EXPRESSION';
  5262. var UNION_TYPE = 'UNION_TYPE';
  5263. var VARIABLE_DECLARATION = 'VARIABLE_DECLARATION';
  5264. var VARIABLE_DECLARATION_LIST = 'VARIABLE_DECLARATION_LIST';
  5265. var VARIABLE_STATEMENT = 'VARIABLE_STATEMENT';
  5266. var WHILE_STATEMENT = 'WHILE_STATEMENT';
  5267. var WITH_STATEMENT = 'WITH_STATEMENT';
  5268. var YIELD_EXPRESSION = 'YIELD_EXPRESSION';
  5269. return {
  5270. get ANNOTATION() {
  5271. return ANNOTATION;
  5272. },
  5273. get ANON_BLOCK() {
  5274. return ANON_BLOCK;
  5275. },
  5276. get ARGUMENT_LIST() {
  5277. return ARGUMENT_LIST;
  5278. },
  5279. get ARRAY_COMPREHENSION() {
  5280. return ARRAY_COMPREHENSION;
  5281. },
  5282. get ARRAY_LITERAL() {
  5283. return ARRAY_LITERAL;
  5284. },
  5285. get ARRAY_PATTERN() {
  5286. return ARRAY_PATTERN;
  5287. },
  5288. get ARRAY_TYPE() {
  5289. return ARRAY_TYPE;
  5290. },
  5291. get ARROW_FUNCTION() {
  5292. return ARROW_FUNCTION;
  5293. },
  5294. get ASSIGNMENT_ELEMENT() {
  5295. return ASSIGNMENT_ELEMENT;
  5296. },
  5297. get AWAIT_EXPRESSION() {
  5298. return AWAIT_EXPRESSION;
  5299. },
  5300. get BINARY_EXPRESSION() {
  5301. return BINARY_EXPRESSION;
  5302. },
  5303. get BINDING_ELEMENT() {
  5304. return BINDING_ELEMENT;
  5305. },
  5306. get BINDING_IDENTIFIER() {
  5307. return BINDING_IDENTIFIER;
  5308. },
  5309. get BLOCK() {
  5310. return BLOCK;
  5311. },
  5312. get BREAK_STATEMENT() {
  5313. return BREAK_STATEMENT;
  5314. },
  5315. get CALL_EXPRESSION() {
  5316. return CALL_EXPRESSION;
  5317. },
  5318. get CALL_SIGNATURE() {
  5319. return CALL_SIGNATURE;
  5320. },
  5321. get CASE_CLAUSE() {
  5322. return CASE_CLAUSE;
  5323. },
  5324. get CATCH() {
  5325. return CATCH;
  5326. },
  5327. get CLASS_DECLARATION() {
  5328. return CLASS_DECLARATION;
  5329. },
  5330. get CLASS_EXPRESSION() {
  5331. return CLASS_EXPRESSION;
  5332. },
  5333. get COMMA_EXPRESSION() {
  5334. return COMMA_EXPRESSION;
  5335. },
  5336. get COMPREHENSION_FOR() {
  5337. return COMPREHENSION_FOR;
  5338. },
  5339. get COMPREHENSION_IF() {
  5340. return COMPREHENSION_IF;
  5341. },
  5342. get COMPUTED_PROPERTY_NAME() {
  5343. return COMPUTED_PROPERTY_NAME;
  5344. },
  5345. get CONDITIONAL_EXPRESSION() {
  5346. return CONDITIONAL_EXPRESSION;
  5347. },
  5348. get CONSTRUCT_SIGNATURE() {
  5349. return CONSTRUCT_SIGNATURE;
  5350. },
  5351. get CONSTRUCTOR_TYPE() {
  5352. return CONSTRUCTOR_TYPE;
  5353. },
  5354. get CONTINUE_STATEMENT() {
  5355. return CONTINUE_STATEMENT;
  5356. },
  5357. get COVER_FORMALS() {
  5358. return COVER_FORMALS;
  5359. },
  5360. get COVER_INITIALIZED_NAME() {
  5361. return COVER_INITIALIZED_NAME;
  5362. },
  5363. get DEBUGGER_STATEMENT() {
  5364. return DEBUGGER_STATEMENT;
  5365. },
  5366. get DEFAULT_CLAUSE() {
  5367. return DEFAULT_CLAUSE;
  5368. },
  5369. get DO_WHILE_STATEMENT() {
  5370. return DO_WHILE_STATEMENT;
  5371. },
  5372. get EMPTY_STATEMENT() {
  5373. return EMPTY_STATEMENT;
  5374. },
  5375. get EXPORT_DECLARATION() {
  5376. return EXPORT_DECLARATION;
  5377. },
  5378. get EXPORT_DEFAULT() {
  5379. return EXPORT_DEFAULT;
  5380. },
  5381. get EXPORT_SPECIFIER() {
  5382. return EXPORT_SPECIFIER;
  5383. },
  5384. get EXPORT_SPECIFIER_SET() {
  5385. return EXPORT_SPECIFIER_SET;
  5386. },
  5387. get EXPORT_STAR() {
  5388. return EXPORT_STAR;
  5389. },
  5390. get EXPRESSION_STATEMENT() {
  5391. return EXPRESSION_STATEMENT;
  5392. },
  5393. get FINALLY() {
  5394. return FINALLY;
  5395. },
  5396. get FOR_IN_STATEMENT() {
  5397. return FOR_IN_STATEMENT;
  5398. },
  5399. get FOR_OF_STATEMENT() {
  5400. return FOR_OF_STATEMENT;
  5401. },
  5402. get FOR_ON_STATEMENT() {
  5403. return FOR_ON_STATEMENT;
  5404. },
  5405. get FOR_STATEMENT() {
  5406. return FOR_STATEMENT;
  5407. },
  5408. get FORMAL_PARAMETER() {
  5409. return FORMAL_PARAMETER;
  5410. },
  5411. get FORMAL_PARAMETER_LIST() {
  5412. return FORMAL_PARAMETER_LIST;
  5413. },
  5414. get FORWARD_DEFAULT_EXPORT() {
  5415. return FORWARD_DEFAULT_EXPORT;
  5416. },
  5417. get FUNCTION_BODY() {
  5418. return FUNCTION_BODY;
  5419. },
  5420. get FUNCTION_DECLARATION() {
  5421. return FUNCTION_DECLARATION;
  5422. },
  5423. get FUNCTION_EXPRESSION() {
  5424. return FUNCTION_EXPRESSION;
  5425. },
  5426. get FUNCTION_TYPE() {
  5427. return FUNCTION_TYPE;
  5428. },
  5429. get GENERATOR_COMPREHENSION() {
  5430. return GENERATOR_COMPREHENSION;
  5431. },
  5432. get GET_ACCESSOR() {
  5433. return GET_ACCESSOR;
  5434. },
  5435. get IDENTIFIER_EXPRESSION() {
  5436. return IDENTIFIER_EXPRESSION;
  5437. },
  5438. get IF_STATEMENT() {
  5439. return IF_STATEMENT;
  5440. },
  5441. get IMPORT_CLAUSE_PAIR() {
  5442. return IMPORT_CLAUSE_PAIR;
  5443. },
  5444. get IMPORT_DECLARATION() {
  5445. return IMPORT_DECLARATION;
  5446. },
  5447. get IMPORT_SPECIFIER() {
  5448. return IMPORT_SPECIFIER;
  5449. },
  5450. get IMPORT_SPECIFIER_SET() {
  5451. return IMPORT_SPECIFIER_SET;
  5452. },
  5453. get IMPORT_TYPE_CLAUSE() {
  5454. return IMPORT_TYPE_CLAUSE;
  5455. },
  5456. get IMPORTED_BINDING() {
  5457. return IMPORTED_BINDING;
  5458. },
  5459. get INDEX_SIGNATURE() {
  5460. return INDEX_SIGNATURE;
  5461. },
  5462. get INTERFACE_DECLARATION() {
  5463. return INTERFACE_DECLARATION;
  5464. },
  5465. get JSX_ATTRIBUTE() {
  5466. return JSX_ATTRIBUTE;
  5467. },
  5468. get JSX_ELEMENT() {
  5469. return JSX_ELEMENT;
  5470. },
  5471. get JSX_ELEMENT_NAME() {
  5472. return JSX_ELEMENT_NAME;
  5473. },
  5474. get JSX_PLACEHOLDER() {
  5475. return JSX_PLACEHOLDER;
  5476. },
  5477. get JSX_SPREAD_ATTRIBUTE() {
  5478. return JSX_SPREAD_ATTRIBUTE;
  5479. },
  5480. get JSX_TEXT() {
  5481. return JSX_TEXT;
  5482. },
  5483. get LABELLED_STATEMENT() {
  5484. return LABELLED_STATEMENT;
  5485. },
  5486. get LITERAL_EXPRESSION() {
  5487. return LITERAL_EXPRESSION;
  5488. },
  5489. get LITERAL_PROPERTY_NAME() {
  5490. return LITERAL_PROPERTY_NAME;
  5491. },
  5492. get MEMBER_EXPRESSION() {
  5493. return MEMBER_EXPRESSION;
  5494. },
  5495. get MEMBER_LOOKUP_EXPRESSION() {
  5496. return MEMBER_LOOKUP_EXPRESSION;
  5497. },
  5498. get METHOD() {
  5499. return METHOD;
  5500. },
  5501. get METHOD_SIGNATURE() {
  5502. return METHOD_SIGNATURE;
  5503. },
  5504. get MODULE() {
  5505. return MODULE;
  5506. },
  5507. get MODULE_SPECIFIER() {
  5508. return MODULE_SPECIFIER;
  5509. },
  5510. get NAME_SPACE_EXPORT() {
  5511. return NAME_SPACE_EXPORT;
  5512. },
  5513. get NAME_SPACE_IMPORT() {
  5514. return NAME_SPACE_IMPORT;
  5515. },
  5516. get NAMED_EXPORT() {
  5517. return NAMED_EXPORT;
  5518. },
  5519. get NEW_EXPRESSION() {
  5520. return NEW_EXPRESSION;
  5521. },
  5522. get OBJECT_LITERAL() {
  5523. return OBJECT_LITERAL;
  5524. },
  5525. get OBJECT_PATTERN() {
  5526. return OBJECT_PATTERN;
  5527. },
  5528. get OBJECT_PATTERN_FIELD() {
  5529. return OBJECT_PATTERN_FIELD;
  5530. },
  5531. get OBJECT_TYPE() {
  5532. return OBJECT_TYPE;
  5533. },
  5534. get PAREN_EXPRESSION() {
  5535. return PAREN_EXPRESSION;
  5536. },
  5537. get POSTFIX_EXPRESSION() {
  5538. return POSTFIX_EXPRESSION;
  5539. },
  5540. get PREDEFINED_TYPE() {
  5541. return PREDEFINED_TYPE;
  5542. },
  5543. get PROPERTY_NAME_ASSIGNMENT() {
  5544. return PROPERTY_NAME_ASSIGNMENT;
  5545. },
  5546. get PROPERTY_NAME_SHORTHAND() {
  5547. return PROPERTY_NAME_SHORTHAND;
  5548. },
  5549. get PROPERTY_SIGNATURE() {
  5550. return PROPERTY_SIGNATURE;
  5551. },
  5552. get PROPERTY_VARIABLE_DECLARATION() {
  5553. return PROPERTY_VARIABLE_DECLARATION;
  5554. },
  5555. get REST_PARAMETER() {
  5556. return REST_PARAMETER;
  5557. },
  5558. get RETURN_STATEMENT() {
  5559. return RETURN_STATEMENT;
  5560. },
  5561. get SCRIPT() {
  5562. return SCRIPT;
  5563. },
  5564. get SET_ACCESSOR() {
  5565. return SET_ACCESSOR;
  5566. },
  5567. get SPREAD_EXPRESSION() {
  5568. return SPREAD_EXPRESSION;
  5569. },
  5570. get SPREAD_PATTERN_ELEMENT() {
  5571. return SPREAD_PATTERN_ELEMENT;
  5572. },
  5573. get STATE_MACHINE() {
  5574. return STATE_MACHINE;
  5575. },
  5576. get SUPER_EXPRESSION() {
  5577. return SUPER_EXPRESSION;
  5578. },
  5579. get SWITCH_STATEMENT() {
  5580. return SWITCH_STATEMENT;
  5581. },
  5582. get SYNTAX_ERROR_TREE() {
  5583. return SYNTAX_ERROR_TREE;
  5584. },
  5585. get TEMPLATE_LITERAL_EXPRESSION() {
  5586. return TEMPLATE_LITERAL_EXPRESSION;
  5587. },
  5588. get TEMPLATE_LITERAL_PORTION() {
  5589. return TEMPLATE_LITERAL_PORTION;
  5590. },
  5591. get TEMPLATE_SUBSTITUTION() {
  5592. return TEMPLATE_SUBSTITUTION;
  5593. },
  5594. get THIS_EXPRESSION() {
  5595. return THIS_EXPRESSION;
  5596. },
  5597. get THROW_STATEMENT() {
  5598. return THROW_STATEMENT;
  5599. },
  5600. get TRY_STATEMENT() {
  5601. return TRY_STATEMENT;
  5602. },
  5603. get TYPE_ALIAS_DECLARATION() {
  5604. return TYPE_ALIAS_DECLARATION;
  5605. },
  5606. get TYPE_ARGUMENTS() {
  5607. return TYPE_ARGUMENTS;
  5608. },
  5609. get TYPE_NAME() {
  5610. return TYPE_NAME;
  5611. },
  5612. get TYPE_PARAMETER() {
  5613. return TYPE_PARAMETER;
  5614. },
  5615. get TYPE_PARAMETERS() {
  5616. return TYPE_PARAMETERS;
  5617. },
  5618. get TYPE_REFERENCE() {
  5619. return TYPE_REFERENCE;
  5620. },
  5621. get UNARY_EXPRESSION() {
  5622. return UNARY_EXPRESSION;
  5623. },
  5624. get UNION_TYPE() {
  5625. return UNION_TYPE;
  5626. },
  5627. get VARIABLE_DECLARATION() {
  5628. return VARIABLE_DECLARATION;
  5629. },
  5630. get VARIABLE_DECLARATION_LIST() {
  5631. return VARIABLE_DECLARATION_LIST;
  5632. },
  5633. get VARIABLE_STATEMENT() {
  5634. return VARIABLE_STATEMENT;
  5635. },
  5636. get WHILE_STATEMENT() {
  5637. return WHILE_STATEMENT;
  5638. },
  5639. get WITH_STATEMENT() {
  5640. return WITH_STATEMENT;
  5641. },
  5642. get YIELD_EXPRESSION() {
  5643. return YIELD_EXPRESSION;
  5644. }
  5645. };
  5646. });
  5647. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/TokenType.js", [], function() {
  5648. "use strict";
  5649. var __moduleName = "traceur@0.0.112/src/syntax/TokenType.js";
  5650. var AMPERSAND = '&';
  5651. var AMPERSAND_EQUAL = '&=';
  5652. var AND = '&&';
  5653. var ARROW = '=>';
  5654. var AT = '@';
  5655. var BACK_QUOTE = '`';
  5656. var BANG = '!';
  5657. var BAR = '|';
  5658. var BAR_EQUAL = '|=';
  5659. var BREAK = 'break';
  5660. var CARET = '^';
  5661. var CARET_EQUAL = '^=';
  5662. var CASE = 'case';
  5663. var CATCH = 'catch';
  5664. var CLASS = 'class';
  5665. var CLOSE_ANGLE = '>';
  5666. var CLOSE_CURLY = '}';
  5667. var CLOSE_PAREN = ')';
  5668. var CLOSE_SQUARE = ']';
  5669. var COLON = ':';
  5670. var COMMA = ',';
  5671. var CONST = 'const';
  5672. var CONTINUE = 'continue';
  5673. var DEBUGGER = 'debugger';
  5674. var DEFAULT = 'default';
  5675. var DELETE = 'delete';
  5676. var DO = 'do';
  5677. var DOT_DOT_DOT = '...';
  5678. var ELSE = 'else';
  5679. var END_OF_FILE = 'End of File';
  5680. var ENUM = 'enum';
  5681. var EQUAL = '=';
  5682. var EQUAL_EQUAL = '==';
  5683. var EQUAL_EQUAL_EQUAL = '===';
  5684. var ERROR = 'error';
  5685. var EXPORT = 'export';
  5686. var EXTENDS = 'extends';
  5687. var FALSE = 'false';
  5688. var FINALLY = 'finally';
  5689. var FOR = 'for';
  5690. var FUNCTION = 'function';
  5691. var GREATER_EQUAL = '>=';
  5692. var IDENTIFIER = 'identifier';
  5693. var IF = 'if';
  5694. var IMPLEMENTS = 'implements';
  5695. var IMPORT = 'import';
  5696. var IN = 'in';
  5697. var INSTANCEOF = 'instanceof';
  5698. var INTERFACE = 'interface';
  5699. var JSX_IDENTIFIER = 'jsx identifier';
  5700. var LEFT_SHIFT = '<<';
  5701. var LEFT_SHIFT_EQUAL = '<<=';
  5702. var LESS_EQUAL = '<=';
  5703. var LET = 'let';
  5704. var MINUS = '-';
  5705. var MINUS_EQUAL = '-=';
  5706. var MINUS_MINUS = '--';
  5707. var NEW = 'new';
  5708. var NO_SUBSTITUTION_TEMPLATE = 'no substitution template';
  5709. var NOT_EQUAL = '!=';
  5710. var NOT_EQUAL_EQUAL = '!==';
  5711. var NULL = 'null';
  5712. var NUMBER = 'number literal';
  5713. var OPEN_ANGLE = '<';
  5714. var OPEN_CURLY = '{';
  5715. var OPEN_PAREN = '(';
  5716. var OPEN_SQUARE = '[';
  5717. var OR = '||';
  5718. var PACKAGE = 'package';
  5719. var PERCENT = '%';
  5720. var PERCENT_EQUAL = '%=';
  5721. var PERIOD = '.';
  5722. var PLUS = '+';
  5723. var PLUS_EQUAL = '+=';
  5724. var PLUS_PLUS = '++';
  5725. var PRIVATE = 'private';
  5726. var PROTECTED = 'protected';
  5727. var PUBLIC = 'public';
  5728. var QUESTION = '?';
  5729. var REGULAR_EXPRESSION = 'regular expression literal';
  5730. var RETURN = 'return';
  5731. var RIGHT_SHIFT = '>>';
  5732. var RIGHT_SHIFT_EQUAL = '>>=';
  5733. var SEMI_COLON = ';';
  5734. var SLASH = '/';
  5735. var SLASH_EQUAL = '/=';
  5736. var STAR = '*';
  5737. var STAR_EQUAL = '*=';
  5738. var STAR_STAR = '**';
  5739. var STAR_STAR_EQUAL = '**=';
  5740. var STATIC = 'static';
  5741. var STRING = 'string literal';
  5742. var SUPER = 'super';
  5743. var SWITCH = 'switch';
  5744. var TEMPLATE_HEAD = 'template head';
  5745. var TEMPLATE_MIDDLE = 'template middle';
  5746. var TEMPLATE_TAIL = 'template tail';
  5747. var THIS = 'this';
  5748. var THROW = 'throw';
  5749. var TILDE = '~';
  5750. var TRUE = 'true';
  5751. var TRY = 'try';
  5752. var TYPEOF = 'typeof';
  5753. var UNSIGNED_RIGHT_SHIFT = '>>>';
  5754. var UNSIGNED_RIGHT_SHIFT_EQUAL = '>>>=';
  5755. var VAR = 'var';
  5756. var VOID = 'void';
  5757. var WHILE = 'while';
  5758. var WITH = 'with';
  5759. var YIELD = 'yield';
  5760. return {
  5761. get AMPERSAND() {
  5762. return AMPERSAND;
  5763. },
  5764. get AMPERSAND_EQUAL() {
  5765. return AMPERSAND_EQUAL;
  5766. },
  5767. get AND() {
  5768. return AND;
  5769. },
  5770. get ARROW() {
  5771. return ARROW;
  5772. },
  5773. get AT() {
  5774. return AT;
  5775. },
  5776. get BACK_QUOTE() {
  5777. return BACK_QUOTE;
  5778. },
  5779. get BANG() {
  5780. return BANG;
  5781. },
  5782. get BAR() {
  5783. return BAR;
  5784. },
  5785. get BAR_EQUAL() {
  5786. return BAR_EQUAL;
  5787. },
  5788. get BREAK() {
  5789. return BREAK;
  5790. },
  5791. get CARET() {
  5792. return CARET;
  5793. },
  5794. get CARET_EQUAL() {
  5795. return CARET_EQUAL;
  5796. },
  5797. get CASE() {
  5798. return CASE;
  5799. },
  5800. get CATCH() {
  5801. return CATCH;
  5802. },
  5803. get CLASS() {
  5804. return CLASS;
  5805. },
  5806. get CLOSE_ANGLE() {
  5807. return CLOSE_ANGLE;
  5808. },
  5809. get CLOSE_CURLY() {
  5810. return CLOSE_CURLY;
  5811. },
  5812. get CLOSE_PAREN() {
  5813. return CLOSE_PAREN;
  5814. },
  5815. get CLOSE_SQUARE() {
  5816. return CLOSE_SQUARE;
  5817. },
  5818. get COLON() {
  5819. return COLON;
  5820. },
  5821. get COMMA() {
  5822. return COMMA;
  5823. },
  5824. get CONST() {
  5825. return CONST;
  5826. },
  5827. get CONTINUE() {
  5828. return CONTINUE;
  5829. },
  5830. get DEBUGGER() {
  5831. return DEBUGGER;
  5832. },
  5833. get DEFAULT() {
  5834. return DEFAULT;
  5835. },
  5836. get DELETE() {
  5837. return DELETE;
  5838. },
  5839. get DO() {
  5840. return DO;
  5841. },
  5842. get DOT_DOT_DOT() {
  5843. return DOT_DOT_DOT;
  5844. },
  5845. get ELSE() {
  5846. return ELSE;
  5847. },
  5848. get END_OF_FILE() {
  5849. return END_OF_FILE;
  5850. },
  5851. get ENUM() {
  5852. return ENUM;
  5853. },
  5854. get EQUAL() {
  5855. return EQUAL;
  5856. },
  5857. get EQUAL_EQUAL() {
  5858. return EQUAL_EQUAL;
  5859. },
  5860. get EQUAL_EQUAL_EQUAL() {
  5861. return EQUAL_EQUAL_EQUAL;
  5862. },
  5863. get ERROR() {
  5864. return ERROR;
  5865. },
  5866. get EXPORT() {
  5867. return EXPORT;
  5868. },
  5869. get EXTENDS() {
  5870. return EXTENDS;
  5871. },
  5872. get FALSE() {
  5873. return FALSE;
  5874. },
  5875. get FINALLY() {
  5876. return FINALLY;
  5877. },
  5878. get FOR() {
  5879. return FOR;
  5880. },
  5881. get FUNCTION() {
  5882. return FUNCTION;
  5883. },
  5884. get GREATER_EQUAL() {
  5885. return GREATER_EQUAL;
  5886. },
  5887. get IDENTIFIER() {
  5888. return IDENTIFIER;
  5889. },
  5890. get IF() {
  5891. return IF;
  5892. },
  5893. get IMPLEMENTS() {
  5894. return IMPLEMENTS;
  5895. },
  5896. get IMPORT() {
  5897. return IMPORT;
  5898. },
  5899. get IN() {
  5900. return IN;
  5901. },
  5902. get INSTANCEOF() {
  5903. return INSTANCEOF;
  5904. },
  5905. get INTERFACE() {
  5906. return INTERFACE;
  5907. },
  5908. get JSX_IDENTIFIER() {
  5909. return JSX_IDENTIFIER;
  5910. },
  5911. get LEFT_SHIFT() {
  5912. return LEFT_SHIFT;
  5913. },
  5914. get LEFT_SHIFT_EQUAL() {
  5915. return LEFT_SHIFT_EQUAL;
  5916. },
  5917. get LESS_EQUAL() {
  5918. return LESS_EQUAL;
  5919. },
  5920. get LET() {
  5921. return LET;
  5922. },
  5923. get MINUS() {
  5924. return MINUS;
  5925. },
  5926. get MINUS_EQUAL() {
  5927. return MINUS_EQUAL;
  5928. },
  5929. get MINUS_MINUS() {
  5930. return MINUS_MINUS;
  5931. },
  5932. get NEW() {
  5933. return NEW;
  5934. },
  5935. get NO_SUBSTITUTION_TEMPLATE() {
  5936. return NO_SUBSTITUTION_TEMPLATE;
  5937. },
  5938. get NOT_EQUAL() {
  5939. return NOT_EQUAL;
  5940. },
  5941. get NOT_EQUAL_EQUAL() {
  5942. return NOT_EQUAL_EQUAL;
  5943. },
  5944. get NULL() {
  5945. return NULL;
  5946. },
  5947. get NUMBER() {
  5948. return NUMBER;
  5949. },
  5950. get OPEN_ANGLE() {
  5951. return OPEN_ANGLE;
  5952. },
  5953. get OPEN_CURLY() {
  5954. return OPEN_CURLY;
  5955. },
  5956. get OPEN_PAREN() {
  5957. return OPEN_PAREN;
  5958. },
  5959. get OPEN_SQUARE() {
  5960. return OPEN_SQUARE;
  5961. },
  5962. get OR() {
  5963. return OR;
  5964. },
  5965. get PACKAGE() {
  5966. return PACKAGE;
  5967. },
  5968. get PERCENT() {
  5969. return PERCENT;
  5970. },
  5971. get PERCENT_EQUAL() {
  5972. return PERCENT_EQUAL;
  5973. },
  5974. get PERIOD() {
  5975. return PERIOD;
  5976. },
  5977. get PLUS() {
  5978. return PLUS;
  5979. },
  5980. get PLUS_EQUAL() {
  5981. return PLUS_EQUAL;
  5982. },
  5983. get PLUS_PLUS() {
  5984. return PLUS_PLUS;
  5985. },
  5986. get PRIVATE() {
  5987. return PRIVATE;
  5988. },
  5989. get PROTECTED() {
  5990. return PROTECTED;
  5991. },
  5992. get PUBLIC() {
  5993. return PUBLIC;
  5994. },
  5995. get QUESTION() {
  5996. return QUESTION;
  5997. },
  5998. get REGULAR_EXPRESSION() {
  5999. return REGULAR_EXPRESSION;
  6000. },
  6001. get RETURN() {
  6002. return RETURN;
  6003. },
  6004. get RIGHT_SHIFT() {
  6005. return RIGHT_SHIFT;
  6006. },
  6007. get RIGHT_SHIFT_EQUAL() {
  6008. return RIGHT_SHIFT_EQUAL;
  6009. },
  6010. get SEMI_COLON() {
  6011. return SEMI_COLON;
  6012. },
  6013. get SLASH() {
  6014. return SLASH;
  6015. },
  6016. get SLASH_EQUAL() {
  6017. return SLASH_EQUAL;
  6018. },
  6019. get STAR() {
  6020. return STAR;
  6021. },
  6022. get STAR_EQUAL() {
  6023. return STAR_EQUAL;
  6024. },
  6025. get STAR_STAR() {
  6026. return STAR_STAR;
  6027. },
  6028. get STAR_STAR_EQUAL() {
  6029. return STAR_STAR_EQUAL;
  6030. },
  6031. get STATIC() {
  6032. return STATIC;
  6033. },
  6034. get STRING() {
  6035. return STRING;
  6036. },
  6037. get SUPER() {
  6038. return SUPER;
  6039. },
  6040. get SWITCH() {
  6041. return SWITCH;
  6042. },
  6043. get TEMPLATE_HEAD() {
  6044. return TEMPLATE_HEAD;
  6045. },
  6046. get TEMPLATE_MIDDLE() {
  6047. return TEMPLATE_MIDDLE;
  6048. },
  6049. get TEMPLATE_TAIL() {
  6050. return TEMPLATE_TAIL;
  6051. },
  6052. get THIS() {
  6053. return THIS;
  6054. },
  6055. get THROW() {
  6056. return THROW;
  6057. },
  6058. get TILDE() {
  6059. return TILDE;
  6060. },
  6061. get TRUE() {
  6062. return TRUE;
  6063. },
  6064. get TRY() {
  6065. return TRY;
  6066. },
  6067. get TYPEOF() {
  6068. return TYPEOF;
  6069. },
  6070. get UNSIGNED_RIGHT_SHIFT() {
  6071. return UNSIGNED_RIGHT_SHIFT;
  6072. },
  6073. get UNSIGNED_RIGHT_SHIFT_EQUAL() {
  6074. return UNSIGNED_RIGHT_SHIFT_EQUAL;
  6075. },
  6076. get VAR() {
  6077. return VAR;
  6078. },
  6079. get VOID() {
  6080. return VOID;
  6081. },
  6082. get WHILE() {
  6083. return WHILE;
  6084. },
  6085. get WITH() {
  6086. return WITH;
  6087. },
  6088. get YIELD() {
  6089. return YIELD;
  6090. }
  6091. };
  6092. });
  6093. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Token.js", [], function() {
  6094. "use strict";
  6095. var __moduleName = "traceur@0.0.112/src/syntax/Token.js";
  6096. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Token.js")),
  6097. AMPERSAND_EQUAL = $__1.AMPERSAND_EQUAL,
  6098. BAR_EQUAL = $__1.BAR_EQUAL,
  6099. CARET_EQUAL = $__1.CARET_EQUAL,
  6100. EQUAL = $__1.EQUAL,
  6101. LEFT_SHIFT_EQUAL = $__1.LEFT_SHIFT_EQUAL,
  6102. MINUS_EQUAL = $__1.MINUS_EQUAL,
  6103. PERCENT_EQUAL = $__1.PERCENT_EQUAL,
  6104. PLUS_EQUAL = $__1.PLUS_EQUAL,
  6105. RIGHT_SHIFT_EQUAL = $__1.RIGHT_SHIFT_EQUAL,
  6106. SLASH_EQUAL = $__1.SLASH_EQUAL,
  6107. STAR_EQUAL = $__1.STAR_EQUAL,
  6108. STAR_STAR_EQUAL = $__1.STAR_STAR_EQUAL,
  6109. UNSIGNED_RIGHT_SHIFT_EQUAL = $__1.UNSIGNED_RIGHT_SHIFT_EQUAL;
  6110. var Token = function() {
  6111. function Token(type, location) {
  6112. this.type = type;
  6113. this.location = location;
  6114. }
  6115. return ($traceurRuntime.createClass)(Token, {
  6116. toString: function() {
  6117. return this.type;
  6118. },
  6119. isAssignmentOperator: function() {
  6120. return isAssignmentOperator(this.type);
  6121. },
  6122. isKeyword: function() {
  6123. return false;
  6124. },
  6125. isStrictKeyword: function() {
  6126. return false;
  6127. }
  6128. }, {});
  6129. }();
  6130. function isAssignmentOperator(type) {
  6131. switch (type) {
  6132. case AMPERSAND_EQUAL:
  6133. case BAR_EQUAL:
  6134. case CARET_EQUAL:
  6135. case EQUAL:
  6136. case LEFT_SHIFT_EQUAL:
  6137. case MINUS_EQUAL:
  6138. case PERCENT_EQUAL:
  6139. case PLUS_EQUAL:
  6140. case RIGHT_SHIFT_EQUAL:
  6141. case SLASH_EQUAL:
  6142. case STAR_EQUAL:
  6143. case STAR_STAR_EQUAL:
  6144. case UNSIGNED_RIGHT_SHIFT_EQUAL:
  6145. return true;
  6146. }
  6147. return false;
  6148. }
  6149. return {
  6150. get Token() {
  6151. return Token;
  6152. },
  6153. get isAssignmentOperator() {
  6154. return isAssignmentOperator;
  6155. }
  6156. };
  6157. });
  6158. $traceurRuntime.registerModule("traceur@0.0.112/src/util/JSON.js", [], function() {
  6159. "use strict";
  6160. var __moduleName = "traceur@0.0.112/src/util/JSON.js";
  6161. function transform(v) {
  6162. var replacer = arguments[1] !== (void 0) ? arguments[1] : function(k, v) {
  6163. return v;
  6164. };
  6165. return transform_(replacer('', v), replacer);
  6166. }
  6167. function transform_(v, replacer) {
  6168. var rv,
  6169. tv;
  6170. if (Array.isArray(v)) {
  6171. var len = v.length;
  6172. rv = Array(len);
  6173. for (var i = 0; i < len; i++) {
  6174. tv = transform_(replacer(String(i), v[i]), replacer);
  6175. rv[i] = tv === undefined ? null : tv;
  6176. }
  6177. return rv;
  6178. }
  6179. if (v instanceof Object) {
  6180. rv = {};
  6181. Object.keys(v).forEach(function(k) {
  6182. tv = transform_(replacer(k, v[k]), replacer);
  6183. if (tv !== undefined) {
  6184. rv[k] = tv;
  6185. }
  6186. });
  6187. return rv;
  6188. }
  6189. return v;
  6190. }
  6191. return {get transform() {
  6192. return transform;
  6193. }};
  6194. });
  6195. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/PredefinedName.js", [], function() {
  6196. "use strict";
  6197. var __moduleName = "traceur@0.0.112/src/syntax/PredefinedName.js";
  6198. var $ARGUMENTS = '$arguments';
  6199. var ANY = 'any';
  6200. var APPLY = 'apply';
  6201. var ARGUMENTS = 'arguments';
  6202. var ARRAY = 'Array';
  6203. var AS = 'as';
  6204. var ASYNC = 'async';
  6205. var ASYNC_STAR = 'async star';
  6206. var AWAIT = 'await';
  6207. var BIND = 'bind';
  6208. var CALL = 'call';
  6209. var CONFIGURABLE = 'configurable';
  6210. var CONSTRUCTOR = 'constructor';
  6211. var CREATE = 'create';
  6212. var CURRENT = 'current';
  6213. var DEFINE_PROPERTY = 'defineProperty';
  6214. var ENUMERABLE = 'enumerable';
  6215. var FREEZE = 'freeze';
  6216. var FROM = 'from';
  6217. var FUNCTION = 'Function';
  6218. var GET = 'get';
  6219. var HAS = 'has';
  6220. var LENGTH = 'length';
  6221. var MODULE = 'module';
  6222. var NEW = 'new';
  6223. var OBJECT = 'Object';
  6224. var OBJECT_NAME = 'Object';
  6225. var OF = 'of';
  6226. var ON = 'on';
  6227. var PREVENT_EXTENSIONS = 'preventExtensions';
  6228. var PROTOTYPE = 'prototype';
  6229. var PUSH = 'push';
  6230. var SET = 'set';
  6231. var SLICE = 'slice';
  6232. var THIS = 'this';
  6233. var TRACEUR_RUNTIME = '$traceurRuntime';
  6234. var TYPE = 'type';
  6235. var UNDEFINED = 'undefined';
  6236. var WRITABLE = 'writable';
  6237. return {
  6238. get $ARGUMENTS() {
  6239. return $ARGUMENTS;
  6240. },
  6241. get ANY() {
  6242. return ANY;
  6243. },
  6244. get APPLY() {
  6245. return APPLY;
  6246. },
  6247. get ARGUMENTS() {
  6248. return ARGUMENTS;
  6249. },
  6250. get ARRAY() {
  6251. return ARRAY;
  6252. },
  6253. get AS() {
  6254. return AS;
  6255. },
  6256. get ASYNC() {
  6257. return ASYNC;
  6258. },
  6259. get ASYNC_STAR() {
  6260. return ASYNC_STAR;
  6261. },
  6262. get AWAIT() {
  6263. return AWAIT;
  6264. },
  6265. get BIND() {
  6266. return BIND;
  6267. },
  6268. get CALL() {
  6269. return CALL;
  6270. },
  6271. get CONFIGURABLE() {
  6272. return CONFIGURABLE;
  6273. },
  6274. get CONSTRUCTOR() {
  6275. return CONSTRUCTOR;
  6276. },
  6277. get CREATE() {
  6278. return CREATE;
  6279. },
  6280. get CURRENT() {
  6281. return CURRENT;
  6282. },
  6283. get DEFINE_PROPERTY() {
  6284. return DEFINE_PROPERTY;
  6285. },
  6286. get ENUMERABLE() {
  6287. return ENUMERABLE;
  6288. },
  6289. get FREEZE() {
  6290. return FREEZE;
  6291. },
  6292. get FROM() {
  6293. return FROM;
  6294. },
  6295. get FUNCTION() {
  6296. return FUNCTION;
  6297. },
  6298. get GET() {
  6299. return GET;
  6300. },
  6301. get HAS() {
  6302. return HAS;
  6303. },
  6304. get LENGTH() {
  6305. return LENGTH;
  6306. },
  6307. get MODULE() {
  6308. return MODULE;
  6309. },
  6310. get NEW() {
  6311. return NEW;
  6312. },
  6313. get OBJECT() {
  6314. return OBJECT;
  6315. },
  6316. get OBJECT_NAME() {
  6317. return OBJECT_NAME;
  6318. },
  6319. get OF() {
  6320. return OF;
  6321. },
  6322. get ON() {
  6323. return ON;
  6324. },
  6325. get PREVENT_EXTENSIONS() {
  6326. return PREVENT_EXTENSIONS;
  6327. },
  6328. get PROTOTYPE() {
  6329. return PROTOTYPE;
  6330. },
  6331. get PUSH() {
  6332. return PUSH;
  6333. },
  6334. get SET() {
  6335. return SET;
  6336. },
  6337. get SLICE() {
  6338. return SLICE;
  6339. },
  6340. get THIS() {
  6341. return THIS;
  6342. },
  6343. get TRACEUR_RUNTIME() {
  6344. return TRACEUR_RUNTIME;
  6345. },
  6346. get TYPE() {
  6347. return TYPE;
  6348. },
  6349. get UNDEFINED() {
  6350. return UNDEFINED;
  6351. },
  6352. get WRITABLE() {
  6353. return WRITABLE;
  6354. }
  6355. };
  6356. });
  6357. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTree.js", [], function() {
  6358. "use strict";
  6359. var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTree.js";
  6360. var ParseTreeType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js"));
  6361. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TokenType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")),
  6362. IDENTIFIER = $__2.IDENTIFIER,
  6363. STAR = $__2.STAR,
  6364. STRING = $__2.STRING,
  6365. VAR = $__2.VAR;
  6366. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Token.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")).Token;
  6367. var utilJSON = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/JSON.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js"));
  6368. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PredefinedName.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")),
  6369. ASYNC = $__4.ASYNC,
  6370. ASYNC_STAR = $__4.ASYNC_STAR;
  6371. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")),
  6372. ARRAY_COMPREHENSION = $__5.ARRAY_COMPREHENSION,
  6373. ARRAY_LITERAL = $__5.ARRAY_LITERAL,
  6374. ARRAY_PATTERN = $__5.ARRAY_PATTERN,
  6375. ARROW_FUNCTION = $__5.ARROW_FUNCTION,
  6376. AWAIT_EXPRESSION = $__5.AWAIT_EXPRESSION,
  6377. BINARY_EXPRESSION = $__5.BINARY_EXPRESSION,
  6378. BINDING_IDENTIFIER = $__5.BINDING_IDENTIFIER,
  6379. BLOCK = $__5.BLOCK,
  6380. BREAK_STATEMENT = $__5.BREAK_STATEMENT,
  6381. CALL_EXPRESSION = $__5.CALL_EXPRESSION,
  6382. CLASS_DECLARATION = $__5.CLASS_DECLARATION,
  6383. CLASS_EXPRESSION = $__5.CLASS_EXPRESSION,
  6384. COMMA_EXPRESSION = $__5.COMMA_EXPRESSION,
  6385. CONDITIONAL_EXPRESSION = $__5.CONDITIONAL_EXPRESSION,
  6386. CONSTRUCTOR_TYPE = $__5.CONSTRUCTOR_TYPE,
  6387. CONTINUE_STATEMENT = $__5.CONTINUE_STATEMENT,
  6388. DEBUGGER_STATEMENT = $__5.DEBUGGER_STATEMENT,
  6389. DO_WHILE_STATEMENT = $__5.DO_WHILE_STATEMENT,
  6390. EMPTY_STATEMENT = $__5.EMPTY_STATEMENT,
  6391. EXPORT_DECLARATION = $__5.EXPORT_DECLARATION,
  6392. EXPRESSION_STATEMENT = $__5.EXPRESSION_STATEMENT,
  6393. FOR_IN_STATEMENT = $__5.FOR_IN_STATEMENT,
  6394. FOR_OF_STATEMENT = $__5.FOR_OF_STATEMENT,
  6395. FOR_ON_STATEMENT = $__5.FOR_ON_STATEMENT,
  6396. FOR_STATEMENT = $__5.FOR_STATEMENT,
  6397. FORMAL_PARAMETER = $__5.FORMAL_PARAMETER,
  6398. FUNCTION_DECLARATION = $__5.FUNCTION_DECLARATION,
  6399. FUNCTION_EXPRESSION = $__5.FUNCTION_EXPRESSION,
  6400. FUNCTION_TYPE = $__5.FUNCTION_TYPE,
  6401. GENERATOR_COMPREHENSION = $__5.GENERATOR_COMPREHENSION,
  6402. IDENTIFIER_EXPRESSION = $__5.IDENTIFIER_EXPRESSION,
  6403. IF_STATEMENT = $__5.IF_STATEMENT,
  6404. IMPORT_DECLARATION = $__5.IMPORT_DECLARATION,
  6405. IMPORTED_BINDING = $__5.IMPORTED_BINDING,
  6406. INTERFACE_DECLARATION = $__5.INTERFACE_DECLARATION,
  6407. JSX_ELEMENT = $__5.JSX_ELEMENT,
  6408. LABELLED_STATEMENT = $__5.LABELLED_STATEMENT,
  6409. LITERAL_EXPRESSION = $__5.LITERAL_EXPRESSION,
  6410. LITERAL_PROPERTY_NAME = $__5.LITERAL_PROPERTY_NAME,
  6411. MEMBER_EXPRESSION = $__5.MEMBER_EXPRESSION,
  6412. MEMBER_LOOKUP_EXPRESSION = $__5.MEMBER_LOOKUP_EXPRESSION,
  6413. NEW_EXPRESSION = $__5.NEW_EXPRESSION,
  6414. OBJECT_LITERAL = $__5.OBJECT_LITERAL,
  6415. OBJECT_PATTERN = $__5.OBJECT_PATTERN,
  6416. OBJECT_TYPE = $__5.OBJECT_TYPE,
  6417. PAREN_EXPRESSION = $__5.PAREN_EXPRESSION,
  6418. POSTFIX_EXPRESSION = $__5.POSTFIX_EXPRESSION,
  6419. PREDEFINED_TYPE = $__5.PREDEFINED_TYPE,
  6420. PROPERTY_NAME_SHORTHAND = $__5.PROPERTY_NAME_SHORTHAND,
  6421. REST_PARAMETER = $__5.REST_PARAMETER,
  6422. RETURN_STATEMENT = $__5.RETURN_STATEMENT,
  6423. SPREAD_EXPRESSION = $__5.SPREAD_EXPRESSION,
  6424. SPREAD_PATTERN_ELEMENT = $__5.SPREAD_PATTERN_ELEMENT,
  6425. SUPER_EXPRESSION = $__5.SUPER_EXPRESSION,
  6426. SWITCH_STATEMENT = $__5.SWITCH_STATEMENT,
  6427. TEMPLATE_LITERAL_EXPRESSION = $__5.TEMPLATE_LITERAL_EXPRESSION,
  6428. THIS_EXPRESSION = $__5.THIS_EXPRESSION,
  6429. THROW_STATEMENT = $__5.THROW_STATEMENT,
  6430. TRY_STATEMENT = $__5.TRY_STATEMENT,
  6431. TYPE_ALIAS_DECLARATION = $__5.TYPE_ALIAS_DECLARATION,
  6432. TYPE_NAME = $__5.TYPE_NAME,
  6433. TYPE_REFERENCE = $__5.TYPE_REFERENCE,
  6434. UNARY_EXPRESSION = $__5.UNARY_EXPRESSION,
  6435. VARIABLE_DECLARATION = $__5.VARIABLE_DECLARATION,
  6436. VARIABLE_STATEMENT = $__5.VARIABLE_STATEMENT,
  6437. WHILE_STATEMENT = $__5.WHILE_STATEMENT,
  6438. WITH_STATEMENT = $__5.WITH_STATEMENT,
  6439. YIELD_EXPRESSION = $__5.YIELD_EXPRESSION;
  6440. var ParseTree = function() {
  6441. function ParseTree(location) {
  6442. this.location = location;
  6443. }
  6444. return ($traceurRuntime.createClass)(ParseTree, {
  6445. isPattern: function() {
  6446. switch (this.type) {
  6447. case ARRAY_PATTERN:
  6448. case OBJECT_PATTERN:
  6449. return true;
  6450. default:
  6451. return false;
  6452. }
  6453. },
  6454. isLeftHandSideExpression: function() {
  6455. switch (this.type) {
  6456. case ARRAY_PATTERN:
  6457. case IDENTIFIER_EXPRESSION:
  6458. case MEMBER_EXPRESSION:
  6459. case MEMBER_LOOKUP_EXPRESSION:
  6460. case OBJECT_PATTERN:
  6461. return true;
  6462. case PAREN_EXPRESSION:
  6463. return this.expression.isLeftHandSideExpression();
  6464. default:
  6465. return false;
  6466. }
  6467. },
  6468. isAssignmentExpression: function() {
  6469. switch (this.type) {
  6470. case ARRAY_COMPREHENSION:
  6471. case ARRAY_LITERAL:
  6472. case ARROW_FUNCTION:
  6473. case AWAIT_EXPRESSION:
  6474. case BINARY_EXPRESSION:
  6475. case CALL_EXPRESSION:
  6476. case CLASS_EXPRESSION:
  6477. case CONDITIONAL_EXPRESSION:
  6478. case FUNCTION_EXPRESSION:
  6479. case GENERATOR_COMPREHENSION:
  6480. case IDENTIFIER_EXPRESSION:
  6481. case JSX_ELEMENT:
  6482. case LITERAL_EXPRESSION:
  6483. case MEMBER_EXPRESSION:
  6484. case MEMBER_LOOKUP_EXPRESSION:
  6485. case NEW_EXPRESSION:
  6486. case OBJECT_LITERAL:
  6487. case PAREN_EXPRESSION:
  6488. case POSTFIX_EXPRESSION:
  6489. case TEMPLATE_LITERAL_EXPRESSION:
  6490. case SUPER_EXPRESSION:
  6491. case THIS_EXPRESSION:
  6492. case UNARY_EXPRESSION:
  6493. case YIELD_EXPRESSION:
  6494. return true;
  6495. default:
  6496. return false;
  6497. }
  6498. },
  6499. isMemberExpression: function() {
  6500. switch (this.type) {
  6501. case THIS_EXPRESSION:
  6502. case CLASS_EXPRESSION:
  6503. case SUPER_EXPRESSION:
  6504. case IDENTIFIER_EXPRESSION:
  6505. case JSX_ELEMENT:
  6506. case LITERAL_EXPRESSION:
  6507. case ARRAY_LITERAL:
  6508. case OBJECT_LITERAL:
  6509. case PAREN_EXPRESSION:
  6510. case TEMPLATE_LITERAL_EXPRESSION:
  6511. case FUNCTION_EXPRESSION:
  6512. case MEMBER_LOOKUP_EXPRESSION:
  6513. case MEMBER_EXPRESSION:
  6514. case CALL_EXPRESSION:
  6515. return true;
  6516. case NEW_EXPRESSION:
  6517. return this.args !== null;
  6518. }
  6519. return false;
  6520. },
  6521. isExpression: function() {
  6522. return this.isAssignmentExpression() || this.type === COMMA_EXPRESSION;
  6523. },
  6524. isAssignmentOrSpread: function() {
  6525. return this.isAssignmentExpression() || this.type === SPREAD_EXPRESSION;
  6526. },
  6527. isRestParameter: function() {
  6528. return this.type === REST_PARAMETER || (this.type === FORMAL_PARAMETER && this.parameter.isRestParameter());
  6529. },
  6530. isSpreadPatternElement: function() {
  6531. return this.type === SPREAD_PATTERN_ELEMENT;
  6532. },
  6533. isStatementListItem: function() {
  6534. return this.isStatement() || this.isDeclaration() || this.type === TYPE_ALIAS_DECLARATION;
  6535. },
  6536. isStatement: function() {
  6537. switch (this.type) {
  6538. case BLOCK:
  6539. case VARIABLE_STATEMENT:
  6540. case EMPTY_STATEMENT:
  6541. case EXPRESSION_STATEMENT:
  6542. case IF_STATEMENT:
  6543. case CONTINUE_STATEMENT:
  6544. case BREAK_STATEMENT:
  6545. case RETURN_STATEMENT:
  6546. case WITH_STATEMENT:
  6547. case LABELLED_STATEMENT:
  6548. case THROW_STATEMENT:
  6549. case TRY_STATEMENT:
  6550. case DEBUGGER_STATEMENT:
  6551. return true;
  6552. }
  6553. return this.isBreakableStatement();
  6554. },
  6555. isDeclaration: function() {
  6556. switch (this.type) {
  6557. case FUNCTION_DECLARATION:
  6558. case CLASS_DECLARATION:
  6559. return true;
  6560. }
  6561. return this.isLexicalDeclaration();
  6562. },
  6563. isLexicalDeclaration: function() {
  6564. switch (this.type) {
  6565. case VARIABLE_STATEMENT:
  6566. return this.declarations.declarationType !== VAR;
  6567. }
  6568. return false;
  6569. },
  6570. isBreakableStatement: function() {
  6571. switch (this.type) {
  6572. case SWITCH_STATEMENT:
  6573. return true;
  6574. }
  6575. return this.isIterationStatement();
  6576. },
  6577. isIterationStatement: function() {
  6578. switch (this.type) {
  6579. case DO_WHILE_STATEMENT:
  6580. case FOR_IN_STATEMENT:
  6581. case FOR_OF_STATEMENT:
  6582. case FOR_ON_STATEMENT:
  6583. case FOR_STATEMENT:
  6584. case WHILE_STATEMENT:
  6585. return true;
  6586. }
  6587. return false;
  6588. },
  6589. isScriptElement: function() {
  6590. switch (this.type) {
  6591. case CLASS_DECLARATION:
  6592. case EXPORT_DECLARATION:
  6593. case FUNCTION_DECLARATION:
  6594. case IMPORT_DECLARATION:
  6595. case INTERFACE_DECLARATION:
  6596. case VARIABLE_DECLARATION:
  6597. case TYPE_ALIAS_DECLARATION:
  6598. return true;
  6599. }
  6600. return this.isStatement();
  6601. },
  6602. isGenerator: function() {
  6603. return this.functionKind !== null && this.functionKind.type === STAR;
  6604. },
  6605. isAsyncFunction: function() {
  6606. return this.functionKind !== null && this.functionKind.type === IDENTIFIER && this.functionKind.value === ASYNC;
  6607. },
  6608. isAsyncGenerator: function() {
  6609. return this.functionKind !== null && this.functionKind.type === IDENTIFIER && this.functionKind.value === ASYNC_STAR;
  6610. },
  6611. isType: function() {
  6612. switch (this.type) {
  6613. case CONSTRUCTOR_TYPE:
  6614. case FUNCTION_TYPE:
  6615. case OBJECT_TYPE:
  6616. case PREDEFINED_TYPE:
  6617. case TYPE_NAME:
  6618. case TYPE_REFERENCE:
  6619. return true;
  6620. }
  6621. return false;
  6622. },
  6623. getDirectivePrologueStringToken_: function() {
  6624. var tree = this;
  6625. if (tree.type !== EXPRESSION_STATEMENT || !(tree = tree.expression))
  6626. return null;
  6627. if (tree.type !== LITERAL_EXPRESSION || !(tree = tree.literalToken))
  6628. return null;
  6629. if (tree.type !== STRING)
  6630. return null;
  6631. return tree;
  6632. },
  6633. isDirectivePrologue: function() {
  6634. return this.getDirectivePrologueStringToken_() !== null;
  6635. },
  6636. isUseStrictDirective: function() {
  6637. var token = this.getDirectivePrologueStringToken_();
  6638. if (!token)
  6639. return false;
  6640. var v = token.value;
  6641. return v === '"use strict"' || v === "'use strict'";
  6642. },
  6643. toJSON: function() {
  6644. return utilJSON.transform(this, ParseTree.replacer);
  6645. },
  6646. stringify: function() {
  6647. var indent = arguments[0] !== (void 0) ? arguments[0] : 2;
  6648. return JSON.stringify(this, ParseTree.replacer, indent);
  6649. },
  6650. getStringValue: function() {
  6651. switch (this.type) {
  6652. case IDENTIFIER_EXPRESSION:
  6653. case BINDING_IDENTIFIER:
  6654. return this.identifierToken.toString();
  6655. case IMPORTED_BINDING:
  6656. return this.binding.getStringValue();
  6657. case PROPERTY_NAME_SHORTHAND:
  6658. return this.name.toString();
  6659. case LITERAL_PROPERTY_NAME:
  6660. return this.literalToken.toString();
  6661. }
  6662. throw new Error('Not yet implemented');
  6663. }
  6664. }, {
  6665. stripLocation: function(key, value) {
  6666. if (key === 'location') {
  6667. return undefined;
  6668. }
  6669. return value;
  6670. },
  6671. replacer: function(k, v) {
  6672. if (v instanceof ParseTree || v instanceof Token) {
  6673. var rv = {type: v.type};
  6674. Object.keys(v).forEach(function(name) {
  6675. if (name !== 'location')
  6676. rv[name] = v[name];
  6677. });
  6678. return rv;
  6679. }
  6680. return v;
  6681. }
  6682. });
  6683. }();
  6684. return {
  6685. get ParseTreeType() {
  6686. return ParseTreeType;
  6687. },
  6688. get ParseTree() {
  6689. return ParseTree;
  6690. }
  6691. };
  6692. });
  6693. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTrees.js", [], function() {
  6694. "use strict";
  6695. var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTrees.js";
  6696. var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTree.js", "traceur@0.0.112/src/syntax/trees/ParseTrees.js")).ParseTree;
  6697. var ParseTreeType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTrees.js"));
  6698. var ANNOTATION = ParseTreeType.ANNOTATION;
  6699. var Annotation = function($__super) {
  6700. function Annotation(location, name, args) {
  6701. $traceurRuntime.superConstructor(Annotation).call(this, location);
  6702. this.name = name;
  6703. this.args = args;
  6704. }
  6705. return ($traceurRuntime.createClass)(Annotation, {
  6706. transform: function(transformer) {
  6707. return transformer.transformAnnotation(this);
  6708. },
  6709. visit: function(visitor) {
  6710. visitor.visitAnnotation(this);
  6711. },
  6712. get type() {
  6713. return ANNOTATION;
  6714. }
  6715. }, {}, $__super);
  6716. }(ParseTree);
  6717. var ANON_BLOCK = ParseTreeType.ANON_BLOCK;
  6718. var AnonBlock = function($__super) {
  6719. function AnonBlock(location, statements) {
  6720. $traceurRuntime.superConstructor(AnonBlock).call(this, location);
  6721. this.statements = statements;
  6722. }
  6723. return ($traceurRuntime.createClass)(AnonBlock, {
  6724. transform: function(transformer) {
  6725. return transformer.transformAnonBlock(this);
  6726. },
  6727. visit: function(visitor) {
  6728. visitor.visitAnonBlock(this);
  6729. },
  6730. get type() {
  6731. return ANON_BLOCK;
  6732. }
  6733. }, {}, $__super);
  6734. }(ParseTree);
  6735. var ARGUMENT_LIST = ParseTreeType.ARGUMENT_LIST;
  6736. var ArgumentList = function($__super) {
  6737. function ArgumentList(location, args) {
  6738. $traceurRuntime.superConstructor(ArgumentList).call(this, location);
  6739. this.args = args;
  6740. }
  6741. return ($traceurRuntime.createClass)(ArgumentList, {
  6742. transform: function(transformer) {
  6743. return transformer.transformArgumentList(this);
  6744. },
  6745. visit: function(visitor) {
  6746. visitor.visitArgumentList(this);
  6747. },
  6748. get type() {
  6749. return ARGUMENT_LIST;
  6750. }
  6751. }, {}, $__super);
  6752. }(ParseTree);
  6753. var ARRAY_COMPREHENSION = ParseTreeType.ARRAY_COMPREHENSION;
  6754. var ArrayComprehension = function($__super) {
  6755. function ArrayComprehension(location, comprehensionList, expression) {
  6756. $traceurRuntime.superConstructor(ArrayComprehension).call(this, location);
  6757. this.comprehensionList = comprehensionList;
  6758. this.expression = expression;
  6759. }
  6760. return ($traceurRuntime.createClass)(ArrayComprehension, {
  6761. transform: function(transformer) {
  6762. return transformer.transformArrayComprehension(this);
  6763. },
  6764. visit: function(visitor) {
  6765. visitor.visitArrayComprehension(this);
  6766. },
  6767. get type() {
  6768. return ARRAY_COMPREHENSION;
  6769. }
  6770. }, {}, $__super);
  6771. }(ParseTree);
  6772. var ARRAY_LITERAL = ParseTreeType.ARRAY_LITERAL;
  6773. var ArrayLiteral = function($__super) {
  6774. function ArrayLiteral(location, elements) {
  6775. $traceurRuntime.superConstructor(ArrayLiteral).call(this, location);
  6776. this.elements = elements;
  6777. }
  6778. return ($traceurRuntime.createClass)(ArrayLiteral, {
  6779. transform: function(transformer) {
  6780. return transformer.transformArrayLiteral(this);
  6781. },
  6782. visit: function(visitor) {
  6783. visitor.visitArrayLiteral(this);
  6784. },
  6785. get type() {
  6786. return ARRAY_LITERAL;
  6787. }
  6788. }, {}, $__super);
  6789. }(ParseTree);
  6790. var ARRAY_PATTERN = ParseTreeType.ARRAY_PATTERN;
  6791. var ArrayPattern = function($__super) {
  6792. function ArrayPattern(location, elements) {
  6793. $traceurRuntime.superConstructor(ArrayPattern).call(this, location);
  6794. this.elements = elements;
  6795. }
  6796. return ($traceurRuntime.createClass)(ArrayPattern, {
  6797. transform: function(transformer) {
  6798. return transformer.transformArrayPattern(this);
  6799. },
  6800. visit: function(visitor) {
  6801. visitor.visitArrayPattern(this);
  6802. },
  6803. get type() {
  6804. return ARRAY_PATTERN;
  6805. }
  6806. }, {}, $__super);
  6807. }(ParseTree);
  6808. var ARRAY_TYPE = ParseTreeType.ARRAY_TYPE;
  6809. var ArrayType = function($__super) {
  6810. function ArrayType(location, elementType) {
  6811. $traceurRuntime.superConstructor(ArrayType).call(this, location);
  6812. this.elementType = elementType;
  6813. }
  6814. return ($traceurRuntime.createClass)(ArrayType, {
  6815. transform: function(transformer) {
  6816. return transformer.transformArrayType(this);
  6817. },
  6818. visit: function(visitor) {
  6819. visitor.visitArrayType(this);
  6820. },
  6821. get type() {
  6822. return ARRAY_TYPE;
  6823. }
  6824. }, {}, $__super);
  6825. }(ParseTree);
  6826. var ARROW_FUNCTION = ParseTreeType.ARROW_FUNCTION;
  6827. var ArrowFunction = function($__super) {
  6828. function ArrowFunction(location, functionKind, parameterList, body) {
  6829. $traceurRuntime.superConstructor(ArrowFunction).call(this, location);
  6830. this.functionKind = functionKind;
  6831. this.parameterList = parameterList;
  6832. this.body = body;
  6833. }
  6834. return ($traceurRuntime.createClass)(ArrowFunction, {
  6835. transform: function(transformer) {
  6836. return transformer.transformArrowFunction(this);
  6837. },
  6838. visit: function(visitor) {
  6839. visitor.visitArrowFunction(this);
  6840. },
  6841. get type() {
  6842. return ARROW_FUNCTION;
  6843. }
  6844. }, {}, $__super);
  6845. }(ParseTree);
  6846. var ASSIGNMENT_ELEMENT = ParseTreeType.ASSIGNMENT_ELEMENT;
  6847. var AssignmentElement = function($__super) {
  6848. function AssignmentElement(location, assignment, initializer) {
  6849. $traceurRuntime.superConstructor(AssignmentElement).call(this, location);
  6850. this.assignment = assignment;
  6851. this.initializer = initializer;
  6852. }
  6853. return ($traceurRuntime.createClass)(AssignmentElement, {
  6854. transform: function(transformer) {
  6855. return transformer.transformAssignmentElement(this);
  6856. },
  6857. visit: function(visitor) {
  6858. visitor.visitAssignmentElement(this);
  6859. },
  6860. get type() {
  6861. return ASSIGNMENT_ELEMENT;
  6862. }
  6863. }, {}, $__super);
  6864. }(ParseTree);
  6865. var AWAIT_EXPRESSION = ParseTreeType.AWAIT_EXPRESSION;
  6866. var AwaitExpression = function($__super) {
  6867. function AwaitExpression(location, expression) {
  6868. $traceurRuntime.superConstructor(AwaitExpression).call(this, location);
  6869. this.expression = expression;
  6870. }
  6871. return ($traceurRuntime.createClass)(AwaitExpression, {
  6872. transform: function(transformer) {
  6873. return transformer.transformAwaitExpression(this);
  6874. },
  6875. visit: function(visitor) {
  6876. visitor.visitAwaitExpression(this);
  6877. },
  6878. get type() {
  6879. return AWAIT_EXPRESSION;
  6880. }
  6881. }, {}, $__super);
  6882. }(ParseTree);
  6883. var BINARY_EXPRESSION = ParseTreeType.BINARY_EXPRESSION;
  6884. var BinaryExpression = function($__super) {
  6885. function BinaryExpression(location, left, operator, right) {
  6886. $traceurRuntime.superConstructor(BinaryExpression).call(this, location);
  6887. this.left = left;
  6888. this.operator = operator;
  6889. this.right = right;
  6890. }
  6891. return ($traceurRuntime.createClass)(BinaryExpression, {
  6892. transform: function(transformer) {
  6893. return transformer.transformBinaryExpression(this);
  6894. },
  6895. visit: function(visitor) {
  6896. visitor.visitBinaryExpression(this);
  6897. },
  6898. get type() {
  6899. return BINARY_EXPRESSION;
  6900. }
  6901. }, {}, $__super);
  6902. }(ParseTree);
  6903. var BINDING_ELEMENT = ParseTreeType.BINDING_ELEMENT;
  6904. var BindingElement = function($__super) {
  6905. function BindingElement(location, binding, initializer) {
  6906. $traceurRuntime.superConstructor(BindingElement).call(this, location);
  6907. this.binding = binding;
  6908. this.initializer = initializer;
  6909. }
  6910. return ($traceurRuntime.createClass)(BindingElement, {
  6911. transform: function(transformer) {
  6912. return transformer.transformBindingElement(this);
  6913. },
  6914. visit: function(visitor) {
  6915. visitor.visitBindingElement(this);
  6916. },
  6917. get type() {
  6918. return BINDING_ELEMENT;
  6919. }
  6920. }, {}, $__super);
  6921. }(ParseTree);
  6922. var BINDING_IDENTIFIER = ParseTreeType.BINDING_IDENTIFIER;
  6923. var BindingIdentifier = function($__super) {
  6924. function BindingIdentifier(location, identifierToken) {
  6925. $traceurRuntime.superConstructor(BindingIdentifier).call(this, location);
  6926. this.identifierToken = identifierToken;
  6927. }
  6928. return ($traceurRuntime.createClass)(BindingIdentifier, {
  6929. transform: function(transformer) {
  6930. return transformer.transformBindingIdentifier(this);
  6931. },
  6932. visit: function(visitor) {
  6933. visitor.visitBindingIdentifier(this);
  6934. },
  6935. get type() {
  6936. return BINDING_IDENTIFIER;
  6937. }
  6938. }, {}, $__super);
  6939. }(ParseTree);
  6940. var BLOCK = ParseTreeType.BLOCK;
  6941. var Block = function($__super) {
  6942. function Block(location, statements) {
  6943. $traceurRuntime.superConstructor(Block).call(this, location);
  6944. this.statements = statements;
  6945. }
  6946. return ($traceurRuntime.createClass)(Block, {
  6947. transform: function(transformer) {
  6948. return transformer.transformBlock(this);
  6949. },
  6950. visit: function(visitor) {
  6951. visitor.visitBlock(this);
  6952. },
  6953. get type() {
  6954. return BLOCK;
  6955. }
  6956. }, {}, $__super);
  6957. }(ParseTree);
  6958. var BREAK_STATEMENT = ParseTreeType.BREAK_STATEMENT;
  6959. var BreakStatement = function($__super) {
  6960. function BreakStatement(location, name) {
  6961. $traceurRuntime.superConstructor(BreakStatement).call(this, location);
  6962. this.name = name;
  6963. }
  6964. return ($traceurRuntime.createClass)(BreakStatement, {
  6965. transform: function(transformer) {
  6966. return transformer.transformBreakStatement(this);
  6967. },
  6968. visit: function(visitor) {
  6969. visitor.visitBreakStatement(this);
  6970. },
  6971. get type() {
  6972. return BREAK_STATEMENT;
  6973. }
  6974. }, {}, $__super);
  6975. }(ParseTree);
  6976. var CALL_EXPRESSION = ParseTreeType.CALL_EXPRESSION;
  6977. var CallExpression = function($__super) {
  6978. function CallExpression(location, operand, args) {
  6979. $traceurRuntime.superConstructor(CallExpression).call(this, location);
  6980. this.operand = operand;
  6981. this.args = args;
  6982. }
  6983. return ($traceurRuntime.createClass)(CallExpression, {
  6984. transform: function(transformer) {
  6985. return transformer.transformCallExpression(this);
  6986. },
  6987. visit: function(visitor) {
  6988. visitor.visitCallExpression(this);
  6989. },
  6990. get type() {
  6991. return CALL_EXPRESSION;
  6992. }
  6993. }, {}, $__super);
  6994. }(ParseTree);
  6995. var CALL_SIGNATURE = ParseTreeType.CALL_SIGNATURE;
  6996. var CallSignature = function($__super) {
  6997. function CallSignature(location, typeParameters, parameterList, returnType) {
  6998. $traceurRuntime.superConstructor(CallSignature).call(this, location);
  6999. this.typeParameters = typeParameters;
  7000. this.parameterList = parameterList;
  7001. this.returnType = returnType;
  7002. }
  7003. return ($traceurRuntime.createClass)(CallSignature, {
  7004. transform: function(transformer) {
  7005. return transformer.transformCallSignature(this);
  7006. },
  7007. visit: function(visitor) {
  7008. visitor.visitCallSignature(this);
  7009. },
  7010. get type() {
  7011. return CALL_SIGNATURE;
  7012. }
  7013. }, {}, $__super);
  7014. }(ParseTree);
  7015. var CASE_CLAUSE = ParseTreeType.CASE_CLAUSE;
  7016. var CaseClause = function($__super) {
  7017. function CaseClause(location, expression, statements) {
  7018. $traceurRuntime.superConstructor(CaseClause).call(this, location);
  7019. this.expression = expression;
  7020. this.statements = statements;
  7021. }
  7022. return ($traceurRuntime.createClass)(CaseClause, {
  7023. transform: function(transformer) {
  7024. return transformer.transformCaseClause(this);
  7025. },
  7026. visit: function(visitor) {
  7027. visitor.visitCaseClause(this);
  7028. },
  7029. get type() {
  7030. return CASE_CLAUSE;
  7031. }
  7032. }, {}, $__super);
  7033. }(ParseTree);
  7034. var CATCH = ParseTreeType.CATCH;
  7035. var Catch = function($__super) {
  7036. function Catch(location, binding, catchBody) {
  7037. $traceurRuntime.superConstructor(Catch).call(this, location);
  7038. this.binding = binding;
  7039. this.catchBody = catchBody;
  7040. }
  7041. return ($traceurRuntime.createClass)(Catch, {
  7042. transform: function(transformer) {
  7043. return transformer.transformCatch(this);
  7044. },
  7045. visit: function(visitor) {
  7046. visitor.visitCatch(this);
  7047. },
  7048. get type() {
  7049. return CATCH;
  7050. }
  7051. }, {}, $__super);
  7052. }(ParseTree);
  7053. var CLASS_DECLARATION = ParseTreeType.CLASS_DECLARATION;
  7054. var ClassDeclaration = function($__super) {
  7055. function ClassDeclaration(location, name, superClass, elements, annotations, typeParameters) {
  7056. $traceurRuntime.superConstructor(ClassDeclaration).call(this, location);
  7057. this.name = name;
  7058. this.superClass = superClass;
  7059. this.elements = elements;
  7060. this.annotations = annotations;
  7061. this.typeParameters = typeParameters;
  7062. }
  7063. return ($traceurRuntime.createClass)(ClassDeclaration, {
  7064. transform: function(transformer) {
  7065. return transformer.transformClassDeclaration(this);
  7066. },
  7067. visit: function(visitor) {
  7068. visitor.visitClassDeclaration(this);
  7069. },
  7070. get type() {
  7071. return CLASS_DECLARATION;
  7072. }
  7073. }, {}, $__super);
  7074. }(ParseTree);
  7075. var CLASS_EXPRESSION = ParseTreeType.CLASS_EXPRESSION;
  7076. var ClassExpression = function($__super) {
  7077. function ClassExpression(location, name, superClass, elements, annotations, typeParameters) {
  7078. $traceurRuntime.superConstructor(ClassExpression).call(this, location);
  7079. this.name = name;
  7080. this.superClass = superClass;
  7081. this.elements = elements;
  7082. this.annotations = annotations;
  7083. this.typeParameters = typeParameters;
  7084. }
  7085. return ($traceurRuntime.createClass)(ClassExpression, {
  7086. transform: function(transformer) {
  7087. return transformer.transformClassExpression(this);
  7088. },
  7089. visit: function(visitor) {
  7090. visitor.visitClassExpression(this);
  7091. },
  7092. get type() {
  7093. return CLASS_EXPRESSION;
  7094. }
  7095. }, {}, $__super);
  7096. }(ParseTree);
  7097. var COMMA_EXPRESSION = ParseTreeType.COMMA_EXPRESSION;
  7098. var CommaExpression = function($__super) {
  7099. function CommaExpression(location, expressions) {
  7100. $traceurRuntime.superConstructor(CommaExpression).call(this, location);
  7101. this.expressions = expressions;
  7102. }
  7103. return ($traceurRuntime.createClass)(CommaExpression, {
  7104. transform: function(transformer) {
  7105. return transformer.transformCommaExpression(this);
  7106. },
  7107. visit: function(visitor) {
  7108. visitor.visitCommaExpression(this);
  7109. },
  7110. get type() {
  7111. return COMMA_EXPRESSION;
  7112. }
  7113. }, {}, $__super);
  7114. }(ParseTree);
  7115. var COMPREHENSION_FOR = ParseTreeType.COMPREHENSION_FOR;
  7116. var ComprehensionFor = function($__super) {
  7117. function ComprehensionFor(location, left, iterator) {
  7118. $traceurRuntime.superConstructor(ComprehensionFor).call(this, location);
  7119. this.left = left;
  7120. this.iterator = iterator;
  7121. }
  7122. return ($traceurRuntime.createClass)(ComprehensionFor, {
  7123. transform: function(transformer) {
  7124. return transformer.transformComprehensionFor(this);
  7125. },
  7126. visit: function(visitor) {
  7127. visitor.visitComprehensionFor(this);
  7128. },
  7129. get type() {
  7130. return COMPREHENSION_FOR;
  7131. }
  7132. }, {}, $__super);
  7133. }(ParseTree);
  7134. var COMPREHENSION_IF = ParseTreeType.COMPREHENSION_IF;
  7135. var ComprehensionIf = function($__super) {
  7136. function ComprehensionIf(location, expression) {
  7137. $traceurRuntime.superConstructor(ComprehensionIf).call(this, location);
  7138. this.expression = expression;
  7139. }
  7140. return ($traceurRuntime.createClass)(ComprehensionIf, {
  7141. transform: function(transformer) {
  7142. return transformer.transformComprehensionIf(this);
  7143. },
  7144. visit: function(visitor) {
  7145. visitor.visitComprehensionIf(this);
  7146. },
  7147. get type() {
  7148. return COMPREHENSION_IF;
  7149. }
  7150. }, {}, $__super);
  7151. }(ParseTree);
  7152. var COMPUTED_PROPERTY_NAME = ParseTreeType.COMPUTED_PROPERTY_NAME;
  7153. var ComputedPropertyName = function($__super) {
  7154. function ComputedPropertyName(location, expression) {
  7155. $traceurRuntime.superConstructor(ComputedPropertyName).call(this, location);
  7156. this.expression = expression;
  7157. }
  7158. return ($traceurRuntime.createClass)(ComputedPropertyName, {
  7159. transform: function(transformer) {
  7160. return transformer.transformComputedPropertyName(this);
  7161. },
  7162. visit: function(visitor) {
  7163. visitor.visitComputedPropertyName(this);
  7164. },
  7165. get type() {
  7166. return COMPUTED_PROPERTY_NAME;
  7167. }
  7168. }, {}, $__super);
  7169. }(ParseTree);
  7170. var CONDITIONAL_EXPRESSION = ParseTreeType.CONDITIONAL_EXPRESSION;
  7171. var ConditionalExpression = function($__super) {
  7172. function ConditionalExpression(location, condition, left, right) {
  7173. $traceurRuntime.superConstructor(ConditionalExpression).call(this, location);
  7174. this.condition = condition;
  7175. this.left = left;
  7176. this.right = right;
  7177. }
  7178. return ($traceurRuntime.createClass)(ConditionalExpression, {
  7179. transform: function(transformer) {
  7180. return transformer.transformConditionalExpression(this);
  7181. },
  7182. visit: function(visitor) {
  7183. visitor.visitConditionalExpression(this);
  7184. },
  7185. get type() {
  7186. return CONDITIONAL_EXPRESSION;
  7187. }
  7188. }, {}, $__super);
  7189. }(ParseTree);
  7190. var CONSTRUCT_SIGNATURE = ParseTreeType.CONSTRUCT_SIGNATURE;
  7191. var ConstructSignature = function($__super) {
  7192. function ConstructSignature(location, typeParameters, parameterList, returnType) {
  7193. $traceurRuntime.superConstructor(ConstructSignature).call(this, location);
  7194. this.typeParameters = typeParameters;
  7195. this.parameterList = parameterList;
  7196. this.returnType = returnType;
  7197. }
  7198. return ($traceurRuntime.createClass)(ConstructSignature, {
  7199. transform: function(transformer) {
  7200. return transformer.transformConstructSignature(this);
  7201. },
  7202. visit: function(visitor) {
  7203. visitor.visitConstructSignature(this);
  7204. },
  7205. get type() {
  7206. return CONSTRUCT_SIGNATURE;
  7207. }
  7208. }, {}, $__super);
  7209. }(ParseTree);
  7210. var CONSTRUCTOR_TYPE = ParseTreeType.CONSTRUCTOR_TYPE;
  7211. var ConstructorType = function($__super) {
  7212. function ConstructorType(location, typeParameters, parameterList, returnType) {
  7213. $traceurRuntime.superConstructor(ConstructorType).call(this, location);
  7214. this.typeParameters = typeParameters;
  7215. this.parameterList = parameterList;
  7216. this.returnType = returnType;
  7217. }
  7218. return ($traceurRuntime.createClass)(ConstructorType, {
  7219. transform: function(transformer) {
  7220. return transformer.transformConstructorType(this);
  7221. },
  7222. visit: function(visitor) {
  7223. visitor.visitConstructorType(this);
  7224. },
  7225. get type() {
  7226. return CONSTRUCTOR_TYPE;
  7227. }
  7228. }, {}, $__super);
  7229. }(ParseTree);
  7230. var CONTINUE_STATEMENT = ParseTreeType.CONTINUE_STATEMENT;
  7231. var ContinueStatement = function($__super) {
  7232. function ContinueStatement(location, name) {
  7233. $traceurRuntime.superConstructor(ContinueStatement).call(this, location);
  7234. this.name = name;
  7235. }
  7236. return ($traceurRuntime.createClass)(ContinueStatement, {
  7237. transform: function(transformer) {
  7238. return transformer.transformContinueStatement(this);
  7239. },
  7240. visit: function(visitor) {
  7241. visitor.visitContinueStatement(this);
  7242. },
  7243. get type() {
  7244. return CONTINUE_STATEMENT;
  7245. }
  7246. }, {}, $__super);
  7247. }(ParseTree);
  7248. var COVER_FORMALS = ParseTreeType.COVER_FORMALS;
  7249. var CoverFormals = function($__super) {
  7250. function CoverFormals(location, expressions) {
  7251. $traceurRuntime.superConstructor(CoverFormals).call(this, location);
  7252. this.expressions = expressions;
  7253. }
  7254. return ($traceurRuntime.createClass)(CoverFormals, {
  7255. transform: function(transformer) {
  7256. return transformer.transformCoverFormals(this);
  7257. },
  7258. visit: function(visitor) {
  7259. visitor.visitCoverFormals(this);
  7260. },
  7261. get type() {
  7262. return COVER_FORMALS;
  7263. }
  7264. }, {}, $__super);
  7265. }(ParseTree);
  7266. var COVER_INITIALIZED_NAME = ParseTreeType.COVER_INITIALIZED_NAME;
  7267. var CoverInitializedName = function($__super) {
  7268. function CoverInitializedName(location, name, equalToken, initializer) {
  7269. $traceurRuntime.superConstructor(CoverInitializedName).call(this, location);
  7270. this.name = name;
  7271. this.equalToken = equalToken;
  7272. this.initializer = initializer;
  7273. }
  7274. return ($traceurRuntime.createClass)(CoverInitializedName, {
  7275. transform: function(transformer) {
  7276. return transformer.transformCoverInitializedName(this);
  7277. },
  7278. visit: function(visitor) {
  7279. visitor.visitCoverInitializedName(this);
  7280. },
  7281. get type() {
  7282. return COVER_INITIALIZED_NAME;
  7283. }
  7284. }, {}, $__super);
  7285. }(ParseTree);
  7286. var DEBUGGER_STATEMENT = ParseTreeType.DEBUGGER_STATEMENT;
  7287. var DebuggerStatement = function($__super) {
  7288. function DebuggerStatement(location) {
  7289. $traceurRuntime.superConstructor(DebuggerStatement).call(this, location);
  7290. }
  7291. return ($traceurRuntime.createClass)(DebuggerStatement, {
  7292. transform: function(transformer) {
  7293. return transformer.transformDebuggerStatement(this);
  7294. },
  7295. visit: function(visitor) {
  7296. visitor.visitDebuggerStatement(this);
  7297. },
  7298. get type() {
  7299. return DEBUGGER_STATEMENT;
  7300. }
  7301. }, {}, $__super);
  7302. }(ParseTree);
  7303. var DEFAULT_CLAUSE = ParseTreeType.DEFAULT_CLAUSE;
  7304. var DefaultClause = function($__super) {
  7305. function DefaultClause(location, statements) {
  7306. $traceurRuntime.superConstructor(DefaultClause).call(this, location);
  7307. this.statements = statements;
  7308. }
  7309. return ($traceurRuntime.createClass)(DefaultClause, {
  7310. transform: function(transformer) {
  7311. return transformer.transformDefaultClause(this);
  7312. },
  7313. visit: function(visitor) {
  7314. visitor.visitDefaultClause(this);
  7315. },
  7316. get type() {
  7317. return DEFAULT_CLAUSE;
  7318. }
  7319. }, {}, $__super);
  7320. }(ParseTree);
  7321. var DO_WHILE_STATEMENT = ParseTreeType.DO_WHILE_STATEMENT;
  7322. var DoWhileStatement = function($__super) {
  7323. function DoWhileStatement(location, body, condition) {
  7324. $traceurRuntime.superConstructor(DoWhileStatement).call(this, location);
  7325. this.body = body;
  7326. this.condition = condition;
  7327. }
  7328. return ($traceurRuntime.createClass)(DoWhileStatement, {
  7329. transform: function(transformer) {
  7330. return transformer.transformDoWhileStatement(this);
  7331. },
  7332. visit: function(visitor) {
  7333. visitor.visitDoWhileStatement(this);
  7334. },
  7335. get type() {
  7336. return DO_WHILE_STATEMENT;
  7337. }
  7338. }, {}, $__super);
  7339. }(ParseTree);
  7340. var EMPTY_STATEMENT = ParseTreeType.EMPTY_STATEMENT;
  7341. var EmptyStatement = function($__super) {
  7342. function EmptyStatement(location) {
  7343. $traceurRuntime.superConstructor(EmptyStatement).call(this, location);
  7344. }
  7345. return ($traceurRuntime.createClass)(EmptyStatement, {
  7346. transform: function(transformer) {
  7347. return transformer.transformEmptyStatement(this);
  7348. },
  7349. visit: function(visitor) {
  7350. visitor.visitEmptyStatement(this);
  7351. },
  7352. get type() {
  7353. return EMPTY_STATEMENT;
  7354. }
  7355. }, {}, $__super);
  7356. }(ParseTree);
  7357. var EXPORT_DECLARATION = ParseTreeType.EXPORT_DECLARATION;
  7358. var ExportDeclaration = function($__super) {
  7359. function ExportDeclaration(location, declaration, annotations) {
  7360. $traceurRuntime.superConstructor(ExportDeclaration).call(this, location);
  7361. this.declaration = declaration;
  7362. this.annotations = annotations;
  7363. }
  7364. return ($traceurRuntime.createClass)(ExportDeclaration, {
  7365. transform: function(transformer) {
  7366. return transformer.transformExportDeclaration(this);
  7367. },
  7368. visit: function(visitor) {
  7369. visitor.visitExportDeclaration(this);
  7370. },
  7371. get type() {
  7372. return EXPORT_DECLARATION;
  7373. }
  7374. }, {}, $__super);
  7375. }(ParseTree);
  7376. var EXPORT_DEFAULT = ParseTreeType.EXPORT_DEFAULT;
  7377. var ExportDefault = function($__super) {
  7378. function ExportDefault(location, expression) {
  7379. $traceurRuntime.superConstructor(ExportDefault).call(this, location);
  7380. this.expression = expression;
  7381. }
  7382. return ($traceurRuntime.createClass)(ExportDefault, {
  7383. transform: function(transformer) {
  7384. return transformer.transformExportDefault(this);
  7385. },
  7386. visit: function(visitor) {
  7387. visitor.visitExportDefault(this);
  7388. },
  7389. get type() {
  7390. return EXPORT_DEFAULT;
  7391. }
  7392. }, {}, $__super);
  7393. }(ParseTree);
  7394. var EXPORT_SPECIFIER = ParseTreeType.EXPORT_SPECIFIER;
  7395. var ExportSpecifier = function($__super) {
  7396. function ExportSpecifier(location, lhs, rhs) {
  7397. $traceurRuntime.superConstructor(ExportSpecifier).call(this, location);
  7398. this.lhs = lhs;
  7399. this.rhs = rhs;
  7400. }
  7401. return ($traceurRuntime.createClass)(ExportSpecifier, {
  7402. transform: function(transformer) {
  7403. return transformer.transformExportSpecifier(this);
  7404. },
  7405. visit: function(visitor) {
  7406. visitor.visitExportSpecifier(this);
  7407. },
  7408. get type() {
  7409. return EXPORT_SPECIFIER;
  7410. }
  7411. }, {}, $__super);
  7412. }(ParseTree);
  7413. var EXPORT_SPECIFIER_SET = ParseTreeType.EXPORT_SPECIFIER_SET;
  7414. var ExportSpecifierSet = function($__super) {
  7415. function ExportSpecifierSet(location, specifiers) {
  7416. $traceurRuntime.superConstructor(ExportSpecifierSet).call(this, location);
  7417. this.specifiers = specifiers;
  7418. }
  7419. return ($traceurRuntime.createClass)(ExportSpecifierSet, {
  7420. transform: function(transformer) {
  7421. return transformer.transformExportSpecifierSet(this);
  7422. },
  7423. visit: function(visitor) {
  7424. visitor.visitExportSpecifierSet(this);
  7425. },
  7426. get type() {
  7427. return EXPORT_SPECIFIER_SET;
  7428. }
  7429. }, {}, $__super);
  7430. }(ParseTree);
  7431. var EXPORT_STAR = ParseTreeType.EXPORT_STAR;
  7432. var ExportStar = function($__super) {
  7433. function ExportStar(location) {
  7434. $traceurRuntime.superConstructor(ExportStar).call(this, location);
  7435. }
  7436. return ($traceurRuntime.createClass)(ExportStar, {
  7437. transform: function(transformer) {
  7438. return transformer.transformExportStar(this);
  7439. },
  7440. visit: function(visitor) {
  7441. visitor.visitExportStar(this);
  7442. },
  7443. get type() {
  7444. return EXPORT_STAR;
  7445. }
  7446. }, {}, $__super);
  7447. }(ParseTree);
  7448. var EXPRESSION_STATEMENT = ParseTreeType.EXPRESSION_STATEMENT;
  7449. var ExpressionStatement = function($__super) {
  7450. function ExpressionStatement(location, expression) {
  7451. $traceurRuntime.superConstructor(ExpressionStatement).call(this, location);
  7452. this.expression = expression;
  7453. }
  7454. return ($traceurRuntime.createClass)(ExpressionStatement, {
  7455. transform: function(transformer) {
  7456. return transformer.transformExpressionStatement(this);
  7457. },
  7458. visit: function(visitor) {
  7459. visitor.visitExpressionStatement(this);
  7460. },
  7461. get type() {
  7462. return EXPRESSION_STATEMENT;
  7463. }
  7464. }, {}, $__super);
  7465. }(ParseTree);
  7466. var FINALLY = ParseTreeType.FINALLY;
  7467. var Finally = function($__super) {
  7468. function Finally(location, block) {
  7469. $traceurRuntime.superConstructor(Finally).call(this, location);
  7470. this.block = block;
  7471. }
  7472. return ($traceurRuntime.createClass)(Finally, {
  7473. transform: function(transformer) {
  7474. return transformer.transformFinally(this);
  7475. },
  7476. visit: function(visitor) {
  7477. visitor.visitFinally(this);
  7478. },
  7479. get type() {
  7480. return FINALLY;
  7481. }
  7482. }, {}, $__super);
  7483. }(ParseTree);
  7484. var FOR_IN_STATEMENT = ParseTreeType.FOR_IN_STATEMENT;
  7485. var ForInStatement = function($__super) {
  7486. function ForInStatement(location, initializer, collection, body) {
  7487. $traceurRuntime.superConstructor(ForInStatement).call(this, location);
  7488. this.initializer = initializer;
  7489. this.collection = collection;
  7490. this.body = body;
  7491. }
  7492. return ($traceurRuntime.createClass)(ForInStatement, {
  7493. transform: function(transformer) {
  7494. return transformer.transformForInStatement(this);
  7495. },
  7496. visit: function(visitor) {
  7497. visitor.visitForInStatement(this);
  7498. },
  7499. get type() {
  7500. return FOR_IN_STATEMENT;
  7501. }
  7502. }, {}, $__super);
  7503. }(ParseTree);
  7504. var FOR_OF_STATEMENT = ParseTreeType.FOR_OF_STATEMENT;
  7505. var ForOfStatement = function($__super) {
  7506. function ForOfStatement(location, initializer, collection, body) {
  7507. $traceurRuntime.superConstructor(ForOfStatement).call(this, location);
  7508. this.initializer = initializer;
  7509. this.collection = collection;
  7510. this.body = body;
  7511. }
  7512. return ($traceurRuntime.createClass)(ForOfStatement, {
  7513. transform: function(transformer) {
  7514. return transformer.transformForOfStatement(this);
  7515. },
  7516. visit: function(visitor) {
  7517. visitor.visitForOfStatement(this);
  7518. },
  7519. get type() {
  7520. return FOR_OF_STATEMENT;
  7521. }
  7522. }, {}, $__super);
  7523. }(ParseTree);
  7524. var FOR_ON_STATEMENT = ParseTreeType.FOR_ON_STATEMENT;
  7525. var ForOnStatement = function($__super) {
  7526. function ForOnStatement(location, initializer, observable, body) {
  7527. $traceurRuntime.superConstructor(ForOnStatement).call(this, location);
  7528. this.initializer = initializer;
  7529. this.observable = observable;
  7530. this.body = body;
  7531. }
  7532. return ($traceurRuntime.createClass)(ForOnStatement, {
  7533. transform: function(transformer) {
  7534. return transformer.transformForOnStatement(this);
  7535. },
  7536. visit: function(visitor) {
  7537. visitor.visitForOnStatement(this);
  7538. },
  7539. get type() {
  7540. return FOR_ON_STATEMENT;
  7541. }
  7542. }, {}, $__super);
  7543. }(ParseTree);
  7544. var FOR_STATEMENT = ParseTreeType.FOR_STATEMENT;
  7545. var ForStatement = function($__super) {
  7546. function ForStatement(location, initializer, condition, increment, body) {
  7547. $traceurRuntime.superConstructor(ForStatement).call(this, location);
  7548. this.initializer = initializer;
  7549. this.condition = condition;
  7550. this.increment = increment;
  7551. this.body = body;
  7552. }
  7553. return ($traceurRuntime.createClass)(ForStatement, {
  7554. transform: function(transformer) {
  7555. return transformer.transformForStatement(this);
  7556. },
  7557. visit: function(visitor) {
  7558. visitor.visitForStatement(this);
  7559. },
  7560. get type() {
  7561. return FOR_STATEMENT;
  7562. }
  7563. }, {}, $__super);
  7564. }(ParseTree);
  7565. var FORMAL_PARAMETER = ParseTreeType.FORMAL_PARAMETER;
  7566. var FormalParameter = function($__super) {
  7567. function FormalParameter(location, parameter, typeAnnotation, annotations) {
  7568. $traceurRuntime.superConstructor(FormalParameter).call(this, location);
  7569. this.parameter = parameter;
  7570. this.typeAnnotation = typeAnnotation;
  7571. this.annotations = annotations;
  7572. }
  7573. return ($traceurRuntime.createClass)(FormalParameter, {
  7574. transform: function(transformer) {
  7575. return transformer.transformFormalParameter(this);
  7576. },
  7577. visit: function(visitor) {
  7578. visitor.visitFormalParameter(this);
  7579. },
  7580. get type() {
  7581. return FORMAL_PARAMETER;
  7582. }
  7583. }, {}, $__super);
  7584. }(ParseTree);
  7585. var FORMAL_PARAMETER_LIST = ParseTreeType.FORMAL_PARAMETER_LIST;
  7586. var FormalParameterList = function($__super) {
  7587. function FormalParameterList(location, parameters) {
  7588. $traceurRuntime.superConstructor(FormalParameterList).call(this, location);
  7589. this.parameters = parameters;
  7590. }
  7591. return ($traceurRuntime.createClass)(FormalParameterList, {
  7592. transform: function(transformer) {
  7593. return transformer.transformFormalParameterList(this);
  7594. },
  7595. visit: function(visitor) {
  7596. visitor.visitFormalParameterList(this);
  7597. },
  7598. get type() {
  7599. return FORMAL_PARAMETER_LIST;
  7600. }
  7601. }, {}, $__super);
  7602. }(ParseTree);
  7603. var FORWARD_DEFAULT_EXPORT = ParseTreeType.FORWARD_DEFAULT_EXPORT;
  7604. var ForwardDefaultExport = function($__super) {
  7605. function ForwardDefaultExport(location, name) {
  7606. $traceurRuntime.superConstructor(ForwardDefaultExport).call(this, location);
  7607. this.name = name;
  7608. }
  7609. return ($traceurRuntime.createClass)(ForwardDefaultExport, {
  7610. transform: function(transformer) {
  7611. return transformer.transformForwardDefaultExport(this);
  7612. },
  7613. visit: function(visitor) {
  7614. visitor.visitForwardDefaultExport(this);
  7615. },
  7616. get type() {
  7617. return FORWARD_DEFAULT_EXPORT;
  7618. }
  7619. }, {}, $__super);
  7620. }(ParseTree);
  7621. var FUNCTION_BODY = ParseTreeType.FUNCTION_BODY;
  7622. var FunctionBody = function($__super) {
  7623. function FunctionBody(location, statements) {
  7624. $traceurRuntime.superConstructor(FunctionBody).call(this, location);
  7625. this.statements = statements;
  7626. }
  7627. return ($traceurRuntime.createClass)(FunctionBody, {
  7628. transform: function(transformer) {
  7629. return transformer.transformFunctionBody(this);
  7630. },
  7631. visit: function(visitor) {
  7632. visitor.visitFunctionBody(this);
  7633. },
  7634. get type() {
  7635. return FUNCTION_BODY;
  7636. }
  7637. }, {}, $__super);
  7638. }(ParseTree);
  7639. var FUNCTION_DECLARATION = ParseTreeType.FUNCTION_DECLARATION;
  7640. var FunctionDeclaration = function($__super) {
  7641. function FunctionDeclaration(location, name, functionKind, parameterList, typeAnnotation, annotations, body) {
  7642. $traceurRuntime.superConstructor(FunctionDeclaration).call(this, location);
  7643. this.name = name;
  7644. this.functionKind = functionKind;
  7645. this.parameterList = parameterList;
  7646. this.typeAnnotation = typeAnnotation;
  7647. this.annotations = annotations;
  7648. this.body = body;
  7649. }
  7650. return ($traceurRuntime.createClass)(FunctionDeclaration, {
  7651. transform: function(transformer) {
  7652. return transformer.transformFunctionDeclaration(this);
  7653. },
  7654. visit: function(visitor) {
  7655. visitor.visitFunctionDeclaration(this);
  7656. },
  7657. get type() {
  7658. return FUNCTION_DECLARATION;
  7659. }
  7660. }, {}, $__super);
  7661. }(ParseTree);
  7662. var FUNCTION_EXPRESSION = ParseTreeType.FUNCTION_EXPRESSION;
  7663. var FunctionExpression = function($__super) {
  7664. function FunctionExpression(location, name, functionKind, parameterList, typeAnnotation, annotations, body) {
  7665. $traceurRuntime.superConstructor(FunctionExpression).call(this, location);
  7666. this.name = name;
  7667. this.functionKind = functionKind;
  7668. this.parameterList = parameterList;
  7669. this.typeAnnotation = typeAnnotation;
  7670. this.annotations = annotations;
  7671. this.body = body;
  7672. }
  7673. return ($traceurRuntime.createClass)(FunctionExpression, {
  7674. transform: function(transformer) {
  7675. return transformer.transformFunctionExpression(this);
  7676. },
  7677. visit: function(visitor) {
  7678. visitor.visitFunctionExpression(this);
  7679. },
  7680. get type() {
  7681. return FUNCTION_EXPRESSION;
  7682. }
  7683. }, {}, $__super);
  7684. }(ParseTree);
  7685. var FUNCTION_TYPE = ParseTreeType.FUNCTION_TYPE;
  7686. var FunctionType = function($__super) {
  7687. function FunctionType(location, typeParameters, parameterList, returnType) {
  7688. $traceurRuntime.superConstructor(FunctionType).call(this, location);
  7689. this.typeParameters = typeParameters;
  7690. this.parameterList = parameterList;
  7691. this.returnType = returnType;
  7692. }
  7693. return ($traceurRuntime.createClass)(FunctionType, {
  7694. transform: function(transformer) {
  7695. return transformer.transformFunctionType(this);
  7696. },
  7697. visit: function(visitor) {
  7698. visitor.visitFunctionType(this);
  7699. },
  7700. get type() {
  7701. return FUNCTION_TYPE;
  7702. }
  7703. }, {}, $__super);
  7704. }(ParseTree);
  7705. var GENERATOR_COMPREHENSION = ParseTreeType.GENERATOR_COMPREHENSION;
  7706. var GeneratorComprehension = function($__super) {
  7707. function GeneratorComprehension(location, comprehensionList, expression) {
  7708. $traceurRuntime.superConstructor(GeneratorComprehension).call(this, location);
  7709. this.comprehensionList = comprehensionList;
  7710. this.expression = expression;
  7711. }
  7712. return ($traceurRuntime.createClass)(GeneratorComprehension, {
  7713. transform: function(transformer) {
  7714. return transformer.transformGeneratorComprehension(this);
  7715. },
  7716. visit: function(visitor) {
  7717. visitor.visitGeneratorComprehension(this);
  7718. },
  7719. get type() {
  7720. return GENERATOR_COMPREHENSION;
  7721. }
  7722. }, {}, $__super);
  7723. }(ParseTree);
  7724. var GET_ACCESSOR = ParseTreeType.GET_ACCESSOR;
  7725. var GetAccessor = function($__super) {
  7726. function GetAccessor(location, isStatic, name, typeAnnotation, annotations, body) {
  7727. $traceurRuntime.superConstructor(GetAccessor).call(this, location);
  7728. this.isStatic = isStatic;
  7729. this.name = name;
  7730. this.typeAnnotation = typeAnnotation;
  7731. this.annotations = annotations;
  7732. this.body = body;
  7733. }
  7734. return ($traceurRuntime.createClass)(GetAccessor, {
  7735. transform: function(transformer) {
  7736. return transformer.transformGetAccessor(this);
  7737. },
  7738. visit: function(visitor) {
  7739. visitor.visitGetAccessor(this);
  7740. },
  7741. get type() {
  7742. return GET_ACCESSOR;
  7743. }
  7744. }, {}, $__super);
  7745. }(ParseTree);
  7746. var IDENTIFIER_EXPRESSION = ParseTreeType.IDENTIFIER_EXPRESSION;
  7747. var IdentifierExpression = function($__super) {
  7748. function IdentifierExpression(location, identifierToken) {
  7749. $traceurRuntime.superConstructor(IdentifierExpression).call(this, location);
  7750. this.identifierToken = identifierToken;
  7751. }
  7752. return ($traceurRuntime.createClass)(IdentifierExpression, {
  7753. transform: function(transformer) {
  7754. return transformer.transformIdentifierExpression(this);
  7755. },
  7756. visit: function(visitor) {
  7757. visitor.visitIdentifierExpression(this);
  7758. },
  7759. get type() {
  7760. return IDENTIFIER_EXPRESSION;
  7761. }
  7762. }, {}, $__super);
  7763. }(ParseTree);
  7764. var IF_STATEMENT = ParseTreeType.IF_STATEMENT;
  7765. var IfStatement = function($__super) {
  7766. function IfStatement(location, condition, ifClause, elseClause) {
  7767. $traceurRuntime.superConstructor(IfStatement).call(this, location);
  7768. this.condition = condition;
  7769. this.ifClause = ifClause;
  7770. this.elseClause = elseClause;
  7771. }
  7772. return ($traceurRuntime.createClass)(IfStatement, {
  7773. transform: function(transformer) {
  7774. return transformer.transformIfStatement(this);
  7775. },
  7776. visit: function(visitor) {
  7777. visitor.visitIfStatement(this);
  7778. },
  7779. get type() {
  7780. return IF_STATEMENT;
  7781. }
  7782. }, {}, $__super);
  7783. }(ParseTree);
  7784. var IMPORTED_BINDING = ParseTreeType.IMPORTED_BINDING;
  7785. var ImportedBinding = function($__super) {
  7786. function ImportedBinding(location, binding) {
  7787. $traceurRuntime.superConstructor(ImportedBinding).call(this, location);
  7788. this.binding = binding;
  7789. }
  7790. return ($traceurRuntime.createClass)(ImportedBinding, {
  7791. transform: function(transformer) {
  7792. return transformer.transformImportedBinding(this);
  7793. },
  7794. visit: function(visitor) {
  7795. visitor.visitImportedBinding(this);
  7796. },
  7797. get type() {
  7798. return IMPORTED_BINDING;
  7799. }
  7800. }, {}, $__super);
  7801. }(ParseTree);
  7802. var IMPORT_CLAUSE_PAIR = ParseTreeType.IMPORT_CLAUSE_PAIR;
  7803. var ImportClausePair = function($__super) {
  7804. function ImportClausePair(location, first, second) {
  7805. $traceurRuntime.superConstructor(ImportClausePair).call(this, location);
  7806. this.first = first;
  7807. this.second = second;
  7808. }
  7809. return ($traceurRuntime.createClass)(ImportClausePair, {
  7810. transform: function(transformer) {
  7811. return transformer.transformImportClausePair(this);
  7812. },
  7813. visit: function(visitor) {
  7814. visitor.visitImportClausePair(this);
  7815. },
  7816. get type() {
  7817. return IMPORT_CLAUSE_PAIR;
  7818. }
  7819. }, {}, $__super);
  7820. }(ParseTree);
  7821. var IMPORT_DECLARATION = ParseTreeType.IMPORT_DECLARATION;
  7822. var ImportDeclaration = function($__super) {
  7823. function ImportDeclaration(location, importClause, moduleSpecifier) {
  7824. $traceurRuntime.superConstructor(ImportDeclaration).call(this, location);
  7825. this.importClause = importClause;
  7826. this.moduleSpecifier = moduleSpecifier;
  7827. }
  7828. return ($traceurRuntime.createClass)(ImportDeclaration, {
  7829. transform: function(transformer) {
  7830. return transformer.transformImportDeclaration(this);
  7831. },
  7832. visit: function(visitor) {
  7833. visitor.visitImportDeclaration(this);
  7834. },
  7835. get type() {
  7836. return IMPORT_DECLARATION;
  7837. }
  7838. }, {}, $__super);
  7839. }(ParseTree);
  7840. var IMPORT_SPECIFIER = ParseTreeType.IMPORT_SPECIFIER;
  7841. var ImportSpecifier = function($__super) {
  7842. function ImportSpecifier(location, binding, name) {
  7843. $traceurRuntime.superConstructor(ImportSpecifier).call(this, location);
  7844. this.binding = binding;
  7845. this.name = name;
  7846. }
  7847. return ($traceurRuntime.createClass)(ImportSpecifier, {
  7848. transform: function(transformer) {
  7849. return transformer.transformImportSpecifier(this);
  7850. },
  7851. visit: function(visitor) {
  7852. visitor.visitImportSpecifier(this);
  7853. },
  7854. get type() {
  7855. return IMPORT_SPECIFIER;
  7856. }
  7857. }, {}, $__super);
  7858. }(ParseTree);
  7859. var IMPORT_SPECIFIER_SET = ParseTreeType.IMPORT_SPECIFIER_SET;
  7860. var ImportSpecifierSet = function($__super) {
  7861. function ImportSpecifierSet(location, specifiers) {
  7862. $traceurRuntime.superConstructor(ImportSpecifierSet).call(this, location);
  7863. this.specifiers = specifiers;
  7864. }
  7865. return ($traceurRuntime.createClass)(ImportSpecifierSet, {
  7866. transform: function(transformer) {
  7867. return transformer.transformImportSpecifierSet(this);
  7868. },
  7869. visit: function(visitor) {
  7870. visitor.visitImportSpecifierSet(this);
  7871. },
  7872. get type() {
  7873. return IMPORT_SPECIFIER_SET;
  7874. }
  7875. }, {}, $__super);
  7876. }(ParseTree);
  7877. var IMPORT_TYPE_CLAUSE = ParseTreeType.IMPORT_TYPE_CLAUSE;
  7878. var ImportTypeClause = function($__super) {
  7879. function ImportTypeClause(location, clause) {
  7880. $traceurRuntime.superConstructor(ImportTypeClause).call(this, location);
  7881. this.clause = clause;
  7882. }
  7883. return ($traceurRuntime.createClass)(ImportTypeClause, {
  7884. transform: function(transformer) {
  7885. return transformer.transformImportTypeClause(this);
  7886. },
  7887. visit: function(visitor) {
  7888. visitor.visitImportTypeClause(this);
  7889. },
  7890. get type() {
  7891. return IMPORT_TYPE_CLAUSE;
  7892. }
  7893. }, {}, $__super);
  7894. }(ParseTree);
  7895. var INDEX_SIGNATURE = ParseTreeType.INDEX_SIGNATURE;
  7896. var IndexSignature = function($__super) {
  7897. function IndexSignature(location, name, indexType, typeAnnotation) {
  7898. $traceurRuntime.superConstructor(IndexSignature).call(this, location);
  7899. this.name = name;
  7900. this.indexType = indexType;
  7901. this.typeAnnotation = typeAnnotation;
  7902. }
  7903. return ($traceurRuntime.createClass)(IndexSignature, {
  7904. transform: function(transformer) {
  7905. return transformer.transformIndexSignature(this);
  7906. },
  7907. visit: function(visitor) {
  7908. visitor.visitIndexSignature(this);
  7909. },
  7910. get type() {
  7911. return INDEX_SIGNATURE;
  7912. }
  7913. }, {}, $__super);
  7914. }(ParseTree);
  7915. var INTERFACE_DECLARATION = ParseTreeType.INTERFACE_DECLARATION;
  7916. var InterfaceDeclaration = function($__super) {
  7917. function InterfaceDeclaration(location, name, typeParameters, extendsClause, objectType) {
  7918. $traceurRuntime.superConstructor(InterfaceDeclaration).call(this, location);
  7919. this.name = name;
  7920. this.typeParameters = typeParameters;
  7921. this.extendsClause = extendsClause;
  7922. this.objectType = objectType;
  7923. }
  7924. return ($traceurRuntime.createClass)(InterfaceDeclaration, {
  7925. transform: function(transformer) {
  7926. return transformer.transformInterfaceDeclaration(this);
  7927. },
  7928. visit: function(visitor) {
  7929. visitor.visitInterfaceDeclaration(this);
  7930. },
  7931. get type() {
  7932. return INTERFACE_DECLARATION;
  7933. }
  7934. }, {}, $__super);
  7935. }(ParseTree);
  7936. var JSX_ATTRIBUTE = ParseTreeType.JSX_ATTRIBUTE;
  7937. var JsxAttribute = function($__super) {
  7938. function JsxAttribute(location, name, value) {
  7939. $traceurRuntime.superConstructor(JsxAttribute).call(this, location);
  7940. this.name = name;
  7941. this.value = value;
  7942. }
  7943. return ($traceurRuntime.createClass)(JsxAttribute, {
  7944. transform: function(transformer) {
  7945. return transformer.transformJsxAttribute(this);
  7946. },
  7947. visit: function(visitor) {
  7948. visitor.visitJsxAttribute(this);
  7949. },
  7950. get type() {
  7951. return JSX_ATTRIBUTE;
  7952. }
  7953. }, {}, $__super);
  7954. }(ParseTree);
  7955. var JSX_ELEMENT = ParseTreeType.JSX_ELEMENT;
  7956. var JsxElement = function($__super) {
  7957. function JsxElement(location, name, attributes, children) {
  7958. $traceurRuntime.superConstructor(JsxElement).call(this, location);
  7959. this.name = name;
  7960. this.attributes = attributes;
  7961. this.children = children;
  7962. }
  7963. return ($traceurRuntime.createClass)(JsxElement, {
  7964. transform: function(transformer) {
  7965. return transformer.transformJsxElement(this);
  7966. },
  7967. visit: function(visitor) {
  7968. visitor.visitJsxElement(this);
  7969. },
  7970. get type() {
  7971. return JSX_ELEMENT;
  7972. }
  7973. }, {}, $__super);
  7974. }(ParseTree);
  7975. var JSX_ELEMENT_NAME = ParseTreeType.JSX_ELEMENT_NAME;
  7976. var JsxElementName = function($__super) {
  7977. function JsxElementName(location, names) {
  7978. $traceurRuntime.superConstructor(JsxElementName).call(this, location);
  7979. this.names = names;
  7980. }
  7981. return ($traceurRuntime.createClass)(JsxElementName, {
  7982. transform: function(transformer) {
  7983. return transformer.transformJsxElementName(this);
  7984. },
  7985. visit: function(visitor) {
  7986. visitor.visitJsxElementName(this);
  7987. },
  7988. get type() {
  7989. return JSX_ELEMENT_NAME;
  7990. }
  7991. }, {}, $__super);
  7992. }(ParseTree);
  7993. var JSX_PLACEHOLDER = ParseTreeType.JSX_PLACEHOLDER;
  7994. var JsxPlaceholder = function($__super) {
  7995. function JsxPlaceholder(location, expression) {
  7996. $traceurRuntime.superConstructor(JsxPlaceholder).call(this, location);
  7997. this.expression = expression;
  7998. }
  7999. return ($traceurRuntime.createClass)(JsxPlaceholder, {
  8000. transform: function(transformer) {
  8001. return transformer.transformJsxPlaceholder(this);
  8002. },
  8003. visit: function(visitor) {
  8004. visitor.visitJsxPlaceholder(this);
  8005. },
  8006. get type() {
  8007. return JSX_PLACEHOLDER;
  8008. }
  8009. }, {}, $__super);
  8010. }(ParseTree);
  8011. var JSX_SPREAD_ATTRIBUTE = ParseTreeType.JSX_SPREAD_ATTRIBUTE;
  8012. var JsxSpreadAttribute = function($__super) {
  8013. function JsxSpreadAttribute(location, expression) {
  8014. $traceurRuntime.superConstructor(JsxSpreadAttribute).call(this, location);
  8015. this.expression = expression;
  8016. }
  8017. return ($traceurRuntime.createClass)(JsxSpreadAttribute, {
  8018. transform: function(transformer) {
  8019. return transformer.transformJsxSpreadAttribute(this);
  8020. },
  8021. visit: function(visitor) {
  8022. visitor.visitJsxSpreadAttribute(this);
  8023. },
  8024. get type() {
  8025. return JSX_SPREAD_ATTRIBUTE;
  8026. }
  8027. }, {}, $__super);
  8028. }(ParseTree);
  8029. var JSX_TEXT = ParseTreeType.JSX_TEXT;
  8030. var JsxText = function($__super) {
  8031. function JsxText(location, value) {
  8032. $traceurRuntime.superConstructor(JsxText).call(this, location);
  8033. this.value = value;
  8034. }
  8035. return ($traceurRuntime.createClass)(JsxText, {
  8036. transform: function(transformer) {
  8037. return transformer.transformJsxText(this);
  8038. },
  8039. visit: function(visitor) {
  8040. visitor.visitJsxText(this);
  8041. },
  8042. get type() {
  8043. return JSX_TEXT;
  8044. }
  8045. }, {}, $__super);
  8046. }(ParseTree);
  8047. var LABELLED_STATEMENT = ParseTreeType.LABELLED_STATEMENT;
  8048. var LabelledStatement = function($__super) {
  8049. function LabelledStatement(location, name, statement) {
  8050. $traceurRuntime.superConstructor(LabelledStatement).call(this, location);
  8051. this.name = name;
  8052. this.statement = statement;
  8053. }
  8054. return ($traceurRuntime.createClass)(LabelledStatement, {
  8055. transform: function(transformer) {
  8056. return transformer.transformLabelledStatement(this);
  8057. },
  8058. visit: function(visitor) {
  8059. visitor.visitLabelledStatement(this);
  8060. },
  8061. get type() {
  8062. return LABELLED_STATEMENT;
  8063. }
  8064. }, {}, $__super);
  8065. }(ParseTree);
  8066. var LITERAL_EXPRESSION = ParseTreeType.LITERAL_EXPRESSION;
  8067. var LiteralExpression = function($__super) {
  8068. function LiteralExpression(location, literalToken) {
  8069. $traceurRuntime.superConstructor(LiteralExpression).call(this, location);
  8070. this.literalToken = literalToken;
  8071. }
  8072. return ($traceurRuntime.createClass)(LiteralExpression, {
  8073. transform: function(transformer) {
  8074. return transformer.transformLiteralExpression(this);
  8075. },
  8076. visit: function(visitor) {
  8077. visitor.visitLiteralExpression(this);
  8078. },
  8079. get type() {
  8080. return LITERAL_EXPRESSION;
  8081. }
  8082. }, {}, $__super);
  8083. }(ParseTree);
  8084. var LITERAL_PROPERTY_NAME = ParseTreeType.LITERAL_PROPERTY_NAME;
  8085. var LiteralPropertyName = function($__super) {
  8086. function LiteralPropertyName(location, literalToken) {
  8087. $traceurRuntime.superConstructor(LiteralPropertyName).call(this, location);
  8088. this.literalToken = literalToken;
  8089. }
  8090. return ($traceurRuntime.createClass)(LiteralPropertyName, {
  8091. transform: function(transformer) {
  8092. return transformer.transformLiteralPropertyName(this);
  8093. },
  8094. visit: function(visitor) {
  8095. visitor.visitLiteralPropertyName(this);
  8096. },
  8097. get type() {
  8098. return LITERAL_PROPERTY_NAME;
  8099. }
  8100. }, {}, $__super);
  8101. }(ParseTree);
  8102. var MEMBER_EXPRESSION = ParseTreeType.MEMBER_EXPRESSION;
  8103. var MemberExpression = function($__super) {
  8104. function MemberExpression(location, operand, memberName) {
  8105. $traceurRuntime.superConstructor(MemberExpression).call(this, location);
  8106. this.operand = operand;
  8107. this.memberName = memberName;
  8108. }
  8109. return ($traceurRuntime.createClass)(MemberExpression, {
  8110. transform: function(transformer) {
  8111. return transformer.transformMemberExpression(this);
  8112. },
  8113. visit: function(visitor) {
  8114. visitor.visitMemberExpression(this);
  8115. },
  8116. get type() {
  8117. return MEMBER_EXPRESSION;
  8118. }
  8119. }, {}, $__super);
  8120. }(ParseTree);
  8121. var MEMBER_LOOKUP_EXPRESSION = ParseTreeType.MEMBER_LOOKUP_EXPRESSION;
  8122. var MemberLookupExpression = function($__super) {
  8123. function MemberLookupExpression(location, operand, memberExpression) {
  8124. $traceurRuntime.superConstructor(MemberLookupExpression).call(this, location);
  8125. this.operand = operand;
  8126. this.memberExpression = memberExpression;
  8127. }
  8128. return ($traceurRuntime.createClass)(MemberLookupExpression, {
  8129. transform: function(transformer) {
  8130. return transformer.transformMemberLookupExpression(this);
  8131. },
  8132. visit: function(visitor) {
  8133. visitor.visitMemberLookupExpression(this);
  8134. },
  8135. get type() {
  8136. return MEMBER_LOOKUP_EXPRESSION;
  8137. }
  8138. }, {}, $__super);
  8139. }(ParseTree);
  8140. var METHOD = ParseTreeType.METHOD;
  8141. var Method = function($__super) {
  8142. function Method(location, isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body, debugName) {
  8143. $traceurRuntime.superConstructor(Method).call(this, location);
  8144. this.isStatic = isStatic;
  8145. this.functionKind = functionKind;
  8146. this.name = name;
  8147. this.parameterList = parameterList;
  8148. this.typeAnnotation = typeAnnotation;
  8149. this.annotations = annotations;
  8150. this.body = body;
  8151. this.debugName = debugName;
  8152. }
  8153. return ($traceurRuntime.createClass)(Method, {
  8154. transform: function(transformer) {
  8155. return transformer.transformMethod(this);
  8156. },
  8157. visit: function(visitor) {
  8158. visitor.visitMethod(this);
  8159. },
  8160. get type() {
  8161. return METHOD;
  8162. }
  8163. }, {}, $__super);
  8164. }(ParseTree);
  8165. var METHOD_SIGNATURE = ParseTreeType.METHOD_SIGNATURE;
  8166. var MethodSignature = function($__super) {
  8167. function MethodSignature(location, name, optional, callSignature) {
  8168. $traceurRuntime.superConstructor(MethodSignature).call(this, location);
  8169. this.name = name;
  8170. this.optional = optional;
  8171. this.callSignature = callSignature;
  8172. }
  8173. return ($traceurRuntime.createClass)(MethodSignature, {
  8174. transform: function(transformer) {
  8175. return transformer.transformMethodSignature(this);
  8176. },
  8177. visit: function(visitor) {
  8178. visitor.visitMethodSignature(this);
  8179. },
  8180. get type() {
  8181. return METHOD_SIGNATURE;
  8182. }
  8183. }, {}, $__super);
  8184. }(ParseTree);
  8185. var MODULE = ParseTreeType.MODULE;
  8186. var Module = function($__super) {
  8187. function Module(location, scriptItemList, moduleName) {
  8188. $traceurRuntime.superConstructor(Module).call(this, location);
  8189. this.scriptItemList = scriptItemList;
  8190. this.moduleName = moduleName;
  8191. }
  8192. return ($traceurRuntime.createClass)(Module, {
  8193. transform: function(transformer) {
  8194. return transformer.transformModule(this);
  8195. },
  8196. visit: function(visitor) {
  8197. visitor.visitModule(this);
  8198. },
  8199. get type() {
  8200. return MODULE;
  8201. }
  8202. }, {}, $__super);
  8203. }(ParseTree);
  8204. var MODULE_SPECIFIER = ParseTreeType.MODULE_SPECIFIER;
  8205. var ModuleSpecifier = function($__super) {
  8206. function ModuleSpecifier(location, token) {
  8207. $traceurRuntime.superConstructor(ModuleSpecifier).call(this, location);
  8208. this.token = token;
  8209. }
  8210. return ($traceurRuntime.createClass)(ModuleSpecifier, {
  8211. transform: function(transformer) {
  8212. return transformer.transformModuleSpecifier(this);
  8213. },
  8214. visit: function(visitor) {
  8215. visitor.visitModuleSpecifier(this);
  8216. },
  8217. get type() {
  8218. return MODULE_SPECIFIER;
  8219. }
  8220. }, {}, $__super);
  8221. }(ParseTree);
  8222. var NAME_SPACE_EXPORT = ParseTreeType.NAME_SPACE_EXPORT;
  8223. var NameSpaceExport = function($__super) {
  8224. function NameSpaceExport(location, name) {
  8225. $traceurRuntime.superConstructor(NameSpaceExport).call(this, location);
  8226. this.name = name;
  8227. }
  8228. return ($traceurRuntime.createClass)(NameSpaceExport, {
  8229. transform: function(transformer) {
  8230. return transformer.transformNameSpaceExport(this);
  8231. },
  8232. visit: function(visitor) {
  8233. visitor.visitNameSpaceExport(this);
  8234. },
  8235. get type() {
  8236. return NAME_SPACE_EXPORT;
  8237. }
  8238. }, {}, $__super);
  8239. }(ParseTree);
  8240. var NAME_SPACE_IMPORT = ParseTreeType.NAME_SPACE_IMPORT;
  8241. var NameSpaceImport = function($__super) {
  8242. function NameSpaceImport(location, binding) {
  8243. $traceurRuntime.superConstructor(NameSpaceImport).call(this, location);
  8244. this.binding = binding;
  8245. }
  8246. return ($traceurRuntime.createClass)(NameSpaceImport, {
  8247. transform: function(transformer) {
  8248. return transformer.transformNameSpaceImport(this);
  8249. },
  8250. visit: function(visitor) {
  8251. visitor.visitNameSpaceImport(this);
  8252. },
  8253. get type() {
  8254. return NAME_SPACE_IMPORT;
  8255. }
  8256. }, {}, $__super);
  8257. }(ParseTree);
  8258. var NAMED_EXPORT = ParseTreeType.NAMED_EXPORT;
  8259. var NamedExport = function($__super) {
  8260. function NamedExport(location, exportClause, moduleSpecifier) {
  8261. $traceurRuntime.superConstructor(NamedExport).call(this, location);
  8262. this.exportClause = exportClause;
  8263. this.moduleSpecifier = moduleSpecifier;
  8264. }
  8265. return ($traceurRuntime.createClass)(NamedExport, {
  8266. transform: function(transformer) {
  8267. return transformer.transformNamedExport(this);
  8268. },
  8269. visit: function(visitor) {
  8270. visitor.visitNamedExport(this);
  8271. },
  8272. get type() {
  8273. return NAMED_EXPORT;
  8274. }
  8275. }, {}, $__super);
  8276. }(ParseTree);
  8277. var NEW_EXPRESSION = ParseTreeType.NEW_EXPRESSION;
  8278. var NewExpression = function($__super) {
  8279. function NewExpression(location, operand, args) {
  8280. $traceurRuntime.superConstructor(NewExpression).call(this, location);
  8281. this.operand = operand;
  8282. this.args = args;
  8283. }
  8284. return ($traceurRuntime.createClass)(NewExpression, {
  8285. transform: function(transformer) {
  8286. return transformer.transformNewExpression(this);
  8287. },
  8288. visit: function(visitor) {
  8289. visitor.visitNewExpression(this);
  8290. },
  8291. get type() {
  8292. return NEW_EXPRESSION;
  8293. }
  8294. }, {}, $__super);
  8295. }(ParseTree);
  8296. var OBJECT_LITERAL = ParseTreeType.OBJECT_LITERAL;
  8297. var ObjectLiteral = function($__super) {
  8298. function ObjectLiteral(location, propertyNameAndValues) {
  8299. $traceurRuntime.superConstructor(ObjectLiteral).call(this, location);
  8300. this.propertyNameAndValues = propertyNameAndValues;
  8301. }
  8302. return ($traceurRuntime.createClass)(ObjectLiteral, {
  8303. transform: function(transformer) {
  8304. return transformer.transformObjectLiteral(this);
  8305. },
  8306. visit: function(visitor) {
  8307. visitor.visitObjectLiteral(this);
  8308. },
  8309. get type() {
  8310. return OBJECT_LITERAL;
  8311. }
  8312. }, {}, $__super);
  8313. }(ParseTree);
  8314. var OBJECT_PATTERN = ParseTreeType.OBJECT_PATTERN;
  8315. var ObjectPattern = function($__super) {
  8316. function ObjectPattern(location, fields) {
  8317. $traceurRuntime.superConstructor(ObjectPattern).call(this, location);
  8318. this.fields = fields;
  8319. }
  8320. return ($traceurRuntime.createClass)(ObjectPattern, {
  8321. transform: function(transformer) {
  8322. return transformer.transformObjectPattern(this);
  8323. },
  8324. visit: function(visitor) {
  8325. visitor.visitObjectPattern(this);
  8326. },
  8327. get type() {
  8328. return OBJECT_PATTERN;
  8329. }
  8330. }, {}, $__super);
  8331. }(ParseTree);
  8332. var OBJECT_PATTERN_FIELD = ParseTreeType.OBJECT_PATTERN_FIELD;
  8333. var ObjectPatternField = function($__super) {
  8334. function ObjectPatternField(location, name, element) {
  8335. $traceurRuntime.superConstructor(ObjectPatternField).call(this, location);
  8336. this.name = name;
  8337. this.element = element;
  8338. }
  8339. return ($traceurRuntime.createClass)(ObjectPatternField, {
  8340. transform: function(transformer) {
  8341. return transformer.transformObjectPatternField(this);
  8342. },
  8343. visit: function(visitor) {
  8344. visitor.visitObjectPatternField(this);
  8345. },
  8346. get type() {
  8347. return OBJECT_PATTERN_FIELD;
  8348. }
  8349. }, {}, $__super);
  8350. }(ParseTree);
  8351. var OBJECT_TYPE = ParseTreeType.OBJECT_TYPE;
  8352. var ObjectType = function($__super) {
  8353. function ObjectType(location, typeMembers) {
  8354. $traceurRuntime.superConstructor(ObjectType).call(this, location);
  8355. this.typeMembers = typeMembers;
  8356. }
  8357. return ($traceurRuntime.createClass)(ObjectType, {
  8358. transform: function(transformer) {
  8359. return transformer.transformObjectType(this);
  8360. },
  8361. visit: function(visitor) {
  8362. visitor.visitObjectType(this);
  8363. },
  8364. get type() {
  8365. return OBJECT_TYPE;
  8366. }
  8367. }, {}, $__super);
  8368. }(ParseTree);
  8369. var PAREN_EXPRESSION = ParseTreeType.PAREN_EXPRESSION;
  8370. var ParenExpression = function($__super) {
  8371. function ParenExpression(location, expression) {
  8372. $traceurRuntime.superConstructor(ParenExpression).call(this, location);
  8373. this.expression = expression;
  8374. }
  8375. return ($traceurRuntime.createClass)(ParenExpression, {
  8376. transform: function(transformer) {
  8377. return transformer.transformParenExpression(this);
  8378. },
  8379. visit: function(visitor) {
  8380. visitor.visitParenExpression(this);
  8381. },
  8382. get type() {
  8383. return PAREN_EXPRESSION;
  8384. }
  8385. }, {}, $__super);
  8386. }(ParseTree);
  8387. var POSTFIX_EXPRESSION = ParseTreeType.POSTFIX_EXPRESSION;
  8388. var PostfixExpression = function($__super) {
  8389. function PostfixExpression(location, operand, operator) {
  8390. $traceurRuntime.superConstructor(PostfixExpression).call(this, location);
  8391. this.operand = operand;
  8392. this.operator = operator;
  8393. }
  8394. return ($traceurRuntime.createClass)(PostfixExpression, {
  8395. transform: function(transformer) {
  8396. return transformer.transformPostfixExpression(this);
  8397. },
  8398. visit: function(visitor) {
  8399. visitor.visitPostfixExpression(this);
  8400. },
  8401. get type() {
  8402. return POSTFIX_EXPRESSION;
  8403. }
  8404. }, {}, $__super);
  8405. }(ParseTree);
  8406. var PREDEFINED_TYPE = ParseTreeType.PREDEFINED_TYPE;
  8407. var PredefinedType = function($__super) {
  8408. function PredefinedType(location, typeToken) {
  8409. $traceurRuntime.superConstructor(PredefinedType).call(this, location);
  8410. this.typeToken = typeToken;
  8411. }
  8412. return ($traceurRuntime.createClass)(PredefinedType, {
  8413. transform: function(transformer) {
  8414. return transformer.transformPredefinedType(this);
  8415. },
  8416. visit: function(visitor) {
  8417. visitor.visitPredefinedType(this);
  8418. },
  8419. get type() {
  8420. return PREDEFINED_TYPE;
  8421. }
  8422. }, {}, $__super);
  8423. }(ParseTree);
  8424. var SCRIPT = ParseTreeType.SCRIPT;
  8425. var Script = function($__super) {
  8426. function Script(location, scriptItemList, moduleName) {
  8427. $traceurRuntime.superConstructor(Script).call(this, location);
  8428. this.scriptItemList = scriptItemList;
  8429. this.moduleName = moduleName;
  8430. }
  8431. return ($traceurRuntime.createClass)(Script, {
  8432. transform: function(transformer) {
  8433. return transformer.transformScript(this);
  8434. },
  8435. visit: function(visitor) {
  8436. visitor.visitScript(this);
  8437. },
  8438. get type() {
  8439. return SCRIPT;
  8440. }
  8441. }, {}, $__super);
  8442. }(ParseTree);
  8443. var PROPERTY_NAME_ASSIGNMENT = ParseTreeType.PROPERTY_NAME_ASSIGNMENT;
  8444. var PropertyNameAssignment = function($__super) {
  8445. function PropertyNameAssignment(location, name, value) {
  8446. $traceurRuntime.superConstructor(PropertyNameAssignment).call(this, location);
  8447. this.name = name;
  8448. this.value = value;
  8449. }
  8450. return ($traceurRuntime.createClass)(PropertyNameAssignment, {
  8451. transform: function(transformer) {
  8452. return transformer.transformPropertyNameAssignment(this);
  8453. },
  8454. visit: function(visitor) {
  8455. visitor.visitPropertyNameAssignment(this);
  8456. },
  8457. get type() {
  8458. return PROPERTY_NAME_ASSIGNMENT;
  8459. }
  8460. }, {}, $__super);
  8461. }(ParseTree);
  8462. var PROPERTY_NAME_SHORTHAND = ParseTreeType.PROPERTY_NAME_SHORTHAND;
  8463. var PropertyNameShorthand = function($__super) {
  8464. function PropertyNameShorthand(location, name) {
  8465. $traceurRuntime.superConstructor(PropertyNameShorthand).call(this, location);
  8466. this.name = name;
  8467. }
  8468. return ($traceurRuntime.createClass)(PropertyNameShorthand, {
  8469. transform: function(transformer) {
  8470. return transformer.transformPropertyNameShorthand(this);
  8471. },
  8472. visit: function(visitor) {
  8473. visitor.visitPropertyNameShorthand(this);
  8474. },
  8475. get type() {
  8476. return PROPERTY_NAME_SHORTHAND;
  8477. }
  8478. }, {}, $__super);
  8479. }(ParseTree);
  8480. var PROPERTY_VARIABLE_DECLARATION = ParseTreeType.PROPERTY_VARIABLE_DECLARATION;
  8481. var PropertyVariableDeclaration = function($__super) {
  8482. function PropertyVariableDeclaration(location, isStatic, name, typeAnnotation, annotations, initializer) {
  8483. $traceurRuntime.superConstructor(PropertyVariableDeclaration).call(this, location);
  8484. this.isStatic = isStatic;
  8485. this.name = name;
  8486. this.typeAnnotation = typeAnnotation;
  8487. this.annotations = annotations;
  8488. this.initializer = initializer;
  8489. }
  8490. return ($traceurRuntime.createClass)(PropertyVariableDeclaration, {
  8491. transform: function(transformer) {
  8492. return transformer.transformPropertyVariableDeclaration(this);
  8493. },
  8494. visit: function(visitor) {
  8495. visitor.visitPropertyVariableDeclaration(this);
  8496. },
  8497. get type() {
  8498. return PROPERTY_VARIABLE_DECLARATION;
  8499. }
  8500. }, {}, $__super);
  8501. }(ParseTree);
  8502. var PROPERTY_SIGNATURE = ParseTreeType.PROPERTY_SIGNATURE;
  8503. var PropertySignature = function($__super) {
  8504. function PropertySignature(location, name, optional, typeAnnotation) {
  8505. $traceurRuntime.superConstructor(PropertySignature).call(this, location);
  8506. this.name = name;
  8507. this.optional = optional;
  8508. this.typeAnnotation = typeAnnotation;
  8509. }
  8510. return ($traceurRuntime.createClass)(PropertySignature, {
  8511. transform: function(transformer) {
  8512. return transformer.transformPropertySignature(this);
  8513. },
  8514. visit: function(visitor) {
  8515. visitor.visitPropertySignature(this);
  8516. },
  8517. get type() {
  8518. return PROPERTY_SIGNATURE;
  8519. }
  8520. }, {}, $__super);
  8521. }(ParseTree);
  8522. var REST_PARAMETER = ParseTreeType.REST_PARAMETER;
  8523. var RestParameter = function($__super) {
  8524. function RestParameter(location, identifier) {
  8525. $traceurRuntime.superConstructor(RestParameter).call(this, location);
  8526. this.identifier = identifier;
  8527. }
  8528. return ($traceurRuntime.createClass)(RestParameter, {
  8529. transform: function(transformer) {
  8530. return transformer.transformRestParameter(this);
  8531. },
  8532. visit: function(visitor) {
  8533. visitor.visitRestParameter(this);
  8534. },
  8535. get type() {
  8536. return REST_PARAMETER;
  8537. }
  8538. }, {}, $__super);
  8539. }(ParseTree);
  8540. var RETURN_STATEMENT = ParseTreeType.RETURN_STATEMENT;
  8541. var ReturnStatement = function($__super) {
  8542. function ReturnStatement(location, expression) {
  8543. $traceurRuntime.superConstructor(ReturnStatement).call(this, location);
  8544. this.expression = expression;
  8545. }
  8546. return ($traceurRuntime.createClass)(ReturnStatement, {
  8547. transform: function(transformer) {
  8548. return transformer.transformReturnStatement(this);
  8549. },
  8550. visit: function(visitor) {
  8551. visitor.visitReturnStatement(this);
  8552. },
  8553. get type() {
  8554. return RETURN_STATEMENT;
  8555. }
  8556. }, {}, $__super);
  8557. }(ParseTree);
  8558. var SET_ACCESSOR = ParseTreeType.SET_ACCESSOR;
  8559. var SetAccessor = function($__super) {
  8560. function SetAccessor(location, isStatic, name, parameterList, annotations, body) {
  8561. $traceurRuntime.superConstructor(SetAccessor).call(this, location);
  8562. this.isStatic = isStatic;
  8563. this.name = name;
  8564. this.parameterList = parameterList;
  8565. this.annotations = annotations;
  8566. this.body = body;
  8567. }
  8568. return ($traceurRuntime.createClass)(SetAccessor, {
  8569. transform: function(transformer) {
  8570. return transformer.transformSetAccessor(this);
  8571. },
  8572. visit: function(visitor) {
  8573. visitor.visitSetAccessor(this);
  8574. },
  8575. get type() {
  8576. return SET_ACCESSOR;
  8577. }
  8578. }, {}, $__super);
  8579. }(ParseTree);
  8580. var SPREAD_EXPRESSION = ParseTreeType.SPREAD_EXPRESSION;
  8581. var SpreadExpression = function($__super) {
  8582. function SpreadExpression(location, expression) {
  8583. $traceurRuntime.superConstructor(SpreadExpression).call(this, location);
  8584. this.expression = expression;
  8585. }
  8586. return ($traceurRuntime.createClass)(SpreadExpression, {
  8587. transform: function(transformer) {
  8588. return transformer.transformSpreadExpression(this);
  8589. },
  8590. visit: function(visitor) {
  8591. visitor.visitSpreadExpression(this);
  8592. },
  8593. get type() {
  8594. return SPREAD_EXPRESSION;
  8595. }
  8596. }, {}, $__super);
  8597. }(ParseTree);
  8598. var SPREAD_PATTERN_ELEMENT = ParseTreeType.SPREAD_PATTERN_ELEMENT;
  8599. var SpreadPatternElement = function($__super) {
  8600. function SpreadPatternElement(location, lvalue) {
  8601. $traceurRuntime.superConstructor(SpreadPatternElement).call(this, location);
  8602. this.lvalue = lvalue;
  8603. }
  8604. return ($traceurRuntime.createClass)(SpreadPatternElement, {
  8605. transform: function(transformer) {
  8606. return transformer.transformSpreadPatternElement(this);
  8607. },
  8608. visit: function(visitor) {
  8609. visitor.visitSpreadPatternElement(this);
  8610. },
  8611. get type() {
  8612. return SPREAD_PATTERN_ELEMENT;
  8613. }
  8614. }, {}, $__super);
  8615. }(ParseTree);
  8616. var SUPER_EXPRESSION = ParseTreeType.SUPER_EXPRESSION;
  8617. var SuperExpression = function($__super) {
  8618. function SuperExpression(location) {
  8619. $traceurRuntime.superConstructor(SuperExpression).call(this, location);
  8620. }
  8621. return ($traceurRuntime.createClass)(SuperExpression, {
  8622. transform: function(transformer) {
  8623. return transformer.transformSuperExpression(this);
  8624. },
  8625. visit: function(visitor) {
  8626. visitor.visitSuperExpression(this);
  8627. },
  8628. get type() {
  8629. return SUPER_EXPRESSION;
  8630. }
  8631. }, {}, $__super);
  8632. }(ParseTree);
  8633. var SWITCH_STATEMENT = ParseTreeType.SWITCH_STATEMENT;
  8634. var SwitchStatement = function($__super) {
  8635. function SwitchStatement(location, expression, caseClauses) {
  8636. $traceurRuntime.superConstructor(SwitchStatement).call(this, location);
  8637. this.expression = expression;
  8638. this.caseClauses = caseClauses;
  8639. }
  8640. return ($traceurRuntime.createClass)(SwitchStatement, {
  8641. transform: function(transformer) {
  8642. return transformer.transformSwitchStatement(this);
  8643. },
  8644. visit: function(visitor) {
  8645. visitor.visitSwitchStatement(this);
  8646. },
  8647. get type() {
  8648. return SWITCH_STATEMENT;
  8649. }
  8650. }, {}, $__super);
  8651. }(ParseTree);
  8652. var SYNTAX_ERROR_TREE = ParseTreeType.SYNTAX_ERROR_TREE;
  8653. var SyntaxErrorTree = function($__super) {
  8654. function SyntaxErrorTree(location, nextToken, message) {
  8655. $traceurRuntime.superConstructor(SyntaxErrorTree).call(this, location);
  8656. this.nextToken = nextToken;
  8657. this.message = message;
  8658. }
  8659. return ($traceurRuntime.createClass)(SyntaxErrorTree, {
  8660. transform: function(transformer) {
  8661. return transformer.transformSyntaxErrorTree(this);
  8662. },
  8663. visit: function(visitor) {
  8664. visitor.visitSyntaxErrorTree(this);
  8665. },
  8666. get type() {
  8667. return SYNTAX_ERROR_TREE;
  8668. }
  8669. }, {}, $__super);
  8670. }(ParseTree);
  8671. var TEMPLATE_LITERAL_EXPRESSION = ParseTreeType.TEMPLATE_LITERAL_EXPRESSION;
  8672. var TemplateLiteralExpression = function($__super) {
  8673. function TemplateLiteralExpression(location, operand, elements) {
  8674. $traceurRuntime.superConstructor(TemplateLiteralExpression).call(this, location);
  8675. this.operand = operand;
  8676. this.elements = elements;
  8677. }
  8678. return ($traceurRuntime.createClass)(TemplateLiteralExpression, {
  8679. transform: function(transformer) {
  8680. return transformer.transformTemplateLiteralExpression(this);
  8681. },
  8682. visit: function(visitor) {
  8683. visitor.visitTemplateLiteralExpression(this);
  8684. },
  8685. get type() {
  8686. return TEMPLATE_LITERAL_EXPRESSION;
  8687. }
  8688. }, {}, $__super);
  8689. }(ParseTree);
  8690. var TEMPLATE_LITERAL_PORTION = ParseTreeType.TEMPLATE_LITERAL_PORTION;
  8691. var TemplateLiteralPortion = function($__super) {
  8692. function TemplateLiteralPortion(location, value) {
  8693. $traceurRuntime.superConstructor(TemplateLiteralPortion).call(this, location);
  8694. this.value = value;
  8695. }
  8696. return ($traceurRuntime.createClass)(TemplateLiteralPortion, {
  8697. transform: function(transformer) {
  8698. return transformer.transformTemplateLiteralPortion(this);
  8699. },
  8700. visit: function(visitor) {
  8701. visitor.visitTemplateLiteralPortion(this);
  8702. },
  8703. get type() {
  8704. return TEMPLATE_LITERAL_PORTION;
  8705. }
  8706. }, {}, $__super);
  8707. }(ParseTree);
  8708. var TEMPLATE_SUBSTITUTION = ParseTreeType.TEMPLATE_SUBSTITUTION;
  8709. var TemplateSubstitution = function($__super) {
  8710. function TemplateSubstitution(location, expression) {
  8711. $traceurRuntime.superConstructor(TemplateSubstitution).call(this, location);
  8712. this.expression = expression;
  8713. }
  8714. return ($traceurRuntime.createClass)(TemplateSubstitution, {
  8715. transform: function(transformer) {
  8716. return transformer.transformTemplateSubstitution(this);
  8717. },
  8718. visit: function(visitor) {
  8719. visitor.visitTemplateSubstitution(this);
  8720. },
  8721. get type() {
  8722. return TEMPLATE_SUBSTITUTION;
  8723. }
  8724. }, {}, $__super);
  8725. }(ParseTree);
  8726. var THIS_EXPRESSION = ParseTreeType.THIS_EXPRESSION;
  8727. var ThisExpression = function($__super) {
  8728. function ThisExpression(location) {
  8729. $traceurRuntime.superConstructor(ThisExpression).call(this, location);
  8730. }
  8731. return ($traceurRuntime.createClass)(ThisExpression, {
  8732. transform: function(transformer) {
  8733. return transformer.transformThisExpression(this);
  8734. },
  8735. visit: function(visitor) {
  8736. visitor.visitThisExpression(this);
  8737. },
  8738. get type() {
  8739. return THIS_EXPRESSION;
  8740. }
  8741. }, {}, $__super);
  8742. }(ParseTree);
  8743. var THROW_STATEMENT = ParseTreeType.THROW_STATEMENT;
  8744. var ThrowStatement = function($__super) {
  8745. function ThrowStatement(location, value) {
  8746. $traceurRuntime.superConstructor(ThrowStatement).call(this, location);
  8747. this.value = value;
  8748. }
  8749. return ($traceurRuntime.createClass)(ThrowStatement, {
  8750. transform: function(transformer) {
  8751. return transformer.transformThrowStatement(this);
  8752. },
  8753. visit: function(visitor) {
  8754. visitor.visitThrowStatement(this);
  8755. },
  8756. get type() {
  8757. return THROW_STATEMENT;
  8758. }
  8759. }, {}, $__super);
  8760. }(ParseTree);
  8761. var TRY_STATEMENT = ParseTreeType.TRY_STATEMENT;
  8762. var TryStatement = function($__super) {
  8763. function TryStatement(location, body, catchBlock, finallyBlock) {
  8764. $traceurRuntime.superConstructor(TryStatement).call(this, location);
  8765. this.body = body;
  8766. this.catchBlock = catchBlock;
  8767. this.finallyBlock = finallyBlock;
  8768. }
  8769. return ($traceurRuntime.createClass)(TryStatement, {
  8770. transform: function(transformer) {
  8771. return transformer.transformTryStatement(this);
  8772. },
  8773. visit: function(visitor) {
  8774. visitor.visitTryStatement(this);
  8775. },
  8776. get type() {
  8777. return TRY_STATEMENT;
  8778. }
  8779. }, {}, $__super);
  8780. }(ParseTree);
  8781. var TYPE_ALIAS_DECLARATION = ParseTreeType.TYPE_ALIAS_DECLARATION;
  8782. var TypeAliasDeclaration = function($__super) {
  8783. function TypeAliasDeclaration(location, name, value) {
  8784. $traceurRuntime.superConstructor(TypeAliasDeclaration).call(this, location);
  8785. this.name = name;
  8786. this.value = value;
  8787. }
  8788. return ($traceurRuntime.createClass)(TypeAliasDeclaration, {
  8789. transform: function(transformer) {
  8790. return transformer.transformTypeAliasDeclaration(this);
  8791. },
  8792. visit: function(visitor) {
  8793. visitor.visitTypeAliasDeclaration(this);
  8794. },
  8795. get type() {
  8796. return TYPE_ALIAS_DECLARATION;
  8797. }
  8798. }, {}, $__super);
  8799. }(ParseTree);
  8800. var TYPE_ARGUMENTS = ParseTreeType.TYPE_ARGUMENTS;
  8801. var TypeArguments = function($__super) {
  8802. function TypeArguments(location, args) {
  8803. $traceurRuntime.superConstructor(TypeArguments).call(this, location);
  8804. this.args = args;
  8805. }
  8806. return ($traceurRuntime.createClass)(TypeArguments, {
  8807. transform: function(transformer) {
  8808. return transformer.transformTypeArguments(this);
  8809. },
  8810. visit: function(visitor) {
  8811. visitor.visitTypeArguments(this);
  8812. },
  8813. get type() {
  8814. return TYPE_ARGUMENTS;
  8815. }
  8816. }, {}, $__super);
  8817. }(ParseTree);
  8818. var TYPE_NAME = ParseTreeType.TYPE_NAME;
  8819. var TypeName = function($__super) {
  8820. function TypeName(location, moduleName, name) {
  8821. $traceurRuntime.superConstructor(TypeName).call(this, location);
  8822. this.moduleName = moduleName;
  8823. this.name = name;
  8824. }
  8825. return ($traceurRuntime.createClass)(TypeName, {
  8826. transform: function(transformer) {
  8827. return transformer.transformTypeName(this);
  8828. },
  8829. visit: function(visitor) {
  8830. visitor.visitTypeName(this);
  8831. },
  8832. get type() {
  8833. return TYPE_NAME;
  8834. }
  8835. }, {}, $__super);
  8836. }(ParseTree);
  8837. var TYPE_PARAMETER = ParseTreeType.TYPE_PARAMETER;
  8838. var TypeParameter = function($__super) {
  8839. function TypeParameter(location, identifierToken, extendsType) {
  8840. $traceurRuntime.superConstructor(TypeParameter).call(this, location);
  8841. this.identifierToken = identifierToken;
  8842. this.extendsType = extendsType;
  8843. }
  8844. return ($traceurRuntime.createClass)(TypeParameter, {
  8845. transform: function(transformer) {
  8846. return transformer.transformTypeParameter(this);
  8847. },
  8848. visit: function(visitor) {
  8849. visitor.visitTypeParameter(this);
  8850. },
  8851. get type() {
  8852. return TYPE_PARAMETER;
  8853. }
  8854. }, {}, $__super);
  8855. }(ParseTree);
  8856. var TYPE_PARAMETERS = ParseTreeType.TYPE_PARAMETERS;
  8857. var TypeParameters = function($__super) {
  8858. function TypeParameters(location, parameters) {
  8859. $traceurRuntime.superConstructor(TypeParameters).call(this, location);
  8860. this.parameters = parameters;
  8861. }
  8862. return ($traceurRuntime.createClass)(TypeParameters, {
  8863. transform: function(transformer) {
  8864. return transformer.transformTypeParameters(this);
  8865. },
  8866. visit: function(visitor) {
  8867. visitor.visitTypeParameters(this);
  8868. },
  8869. get type() {
  8870. return TYPE_PARAMETERS;
  8871. }
  8872. }, {}, $__super);
  8873. }(ParseTree);
  8874. var TYPE_REFERENCE = ParseTreeType.TYPE_REFERENCE;
  8875. var TypeReference = function($__super) {
  8876. function TypeReference(location, typeName, args) {
  8877. $traceurRuntime.superConstructor(TypeReference).call(this, location);
  8878. this.typeName = typeName;
  8879. this.args = args;
  8880. }
  8881. return ($traceurRuntime.createClass)(TypeReference, {
  8882. transform: function(transformer) {
  8883. return transformer.transformTypeReference(this);
  8884. },
  8885. visit: function(visitor) {
  8886. visitor.visitTypeReference(this);
  8887. },
  8888. get type() {
  8889. return TYPE_REFERENCE;
  8890. }
  8891. }, {}, $__super);
  8892. }(ParseTree);
  8893. var UNARY_EXPRESSION = ParseTreeType.UNARY_EXPRESSION;
  8894. var UnaryExpression = function($__super) {
  8895. function UnaryExpression(location, operator, operand) {
  8896. $traceurRuntime.superConstructor(UnaryExpression).call(this, location);
  8897. this.operator = operator;
  8898. this.operand = operand;
  8899. }
  8900. return ($traceurRuntime.createClass)(UnaryExpression, {
  8901. transform: function(transformer) {
  8902. return transformer.transformUnaryExpression(this);
  8903. },
  8904. visit: function(visitor) {
  8905. visitor.visitUnaryExpression(this);
  8906. },
  8907. get type() {
  8908. return UNARY_EXPRESSION;
  8909. }
  8910. }, {}, $__super);
  8911. }(ParseTree);
  8912. var UNION_TYPE = ParseTreeType.UNION_TYPE;
  8913. var UnionType = function($__super) {
  8914. function UnionType(location, types) {
  8915. $traceurRuntime.superConstructor(UnionType).call(this, location);
  8916. this.types = types;
  8917. }
  8918. return ($traceurRuntime.createClass)(UnionType, {
  8919. transform: function(transformer) {
  8920. return transformer.transformUnionType(this);
  8921. },
  8922. visit: function(visitor) {
  8923. visitor.visitUnionType(this);
  8924. },
  8925. get type() {
  8926. return UNION_TYPE;
  8927. }
  8928. }, {}, $__super);
  8929. }(ParseTree);
  8930. var VARIABLE_DECLARATION = ParseTreeType.VARIABLE_DECLARATION;
  8931. var VariableDeclaration = function($__super) {
  8932. function VariableDeclaration(location, lvalue, typeAnnotation, initializer) {
  8933. $traceurRuntime.superConstructor(VariableDeclaration).call(this, location);
  8934. this.lvalue = lvalue;
  8935. this.typeAnnotation = typeAnnotation;
  8936. this.initializer = initializer;
  8937. }
  8938. return ($traceurRuntime.createClass)(VariableDeclaration, {
  8939. transform: function(transformer) {
  8940. return transformer.transformVariableDeclaration(this);
  8941. },
  8942. visit: function(visitor) {
  8943. visitor.visitVariableDeclaration(this);
  8944. },
  8945. get type() {
  8946. return VARIABLE_DECLARATION;
  8947. }
  8948. }, {}, $__super);
  8949. }(ParseTree);
  8950. var VARIABLE_DECLARATION_LIST = ParseTreeType.VARIABLE_DECLARATION_LIST;
  8951. var VariableDeclarationList = function($__super) {
  8952. function VariableDeclarationList(location, declarationType, declarations) {
  8953. $traceurRuntime.superConstructor(VariableDeclarationList).call(this, location);
  8954. this.declarationType = declarationType;
  8955. this.declarations = declarations;
  8956. }
  8957. return ($traceurRuntime.createClass)(VariableDeclarationList, {
  8958. transform: function(transformer) {
  8959. return transformer.transformVariableDeclarationList(this);
  8960. },
  8961. visit: function(visitor) {
  8962. visitor.visitVariableDeclarationList(this);
  8963. },
  8964. get type() {
  8965. return VARIABLE_DECLARATION_LIST;
  8966. }
  8967. }, {}, $__super);
  8968. }(ParseTree);
  8969. var VARIABLE_STATEMENT = ParseTreeType.VARIABLE_STATEMENT;
  8970. var VariableStatement = function($__super) {
  8971. function VariableStatement(location, declarations) {
  8972. $traceurRuntime.superConstructor(VariableStatement).call(this, location);
  8973. this.declarations = declarations;
  8974. }
  8975. return ($traceurRuntime.createClass)(VariableStatement, {
  8976. transform: function(transformer) {
  8977. return transformer.transformVariableStatement(this);
  8978. },
  8979. visit: function(visitor) {
  8980. visitor.visitVariableStatement(this);
  8981. },
  8982. get type() {
  8983. return VARIABLE_STATEMENT;
  8984. }
  8985. }, {}, $__super);
  8986. }(ParseTree);
  8987. var WHILE_STATEMENT = ParseTreeType.WHILE_STATEMENT;
  8988. var WhileStatement = function($__super) {
  8989. function WhileStatement(location, condition, body) {
  8990. $traceurRuntime.superConstructor(WhileStatement).call(this, location);
  8991. this.condition = condition;
  8992. this.body = body;
  8993. }
  8994. return ($traceurRuntime.createClass)(WhileStatement, {
  8995. transform: function(transformer) {
  8996. return transformer.transformWhileStatement(this);
  8997. },
  8998. visit: function(visitor) {
  8999. visitor.visitWhileStatement(this);
  9000. },
  9001. get type() {
  9002. return WHILE_STATEMENT;
  9003. }
  9004. }, {}, $__super);
  9005. }(ParseTree);
  9006. var WITH_STATEMENT = ParseTreeType.WITH_STATEMENT;
  9007. var WithStatement = function($__super) {
  9008. function WithStatement(location, expression, body) {
  9009. $traceurRuntime.superConstructor(WithStatement).call(this, location);
  9010. this.expression = expression;
  9011. this.body = body;
  9012. }
  9013. return ($traceurRuntime.createClass)(WithStatement, {
  9014. transform: function(transformer) {
  9015. return transformer.transformWithStatement(this);
  9016. },
  9017. visit: function(visitor) {
  9018. visitor.visitWithStatement(this);
  9019. },
  9020. get type() {
  9021. return WITH_STATEMENT;
  9022. }
  9023. }, {}, $__super);
  9024. }(ParseTree);
  9025. var YIELD_EXPRESSION = ParseTreeType.YIELD_EXPRESSION;
  9026. var YieldExpression = function($__super) {
  9027. function YieldExpression(location, expression, isYieldFor) {
  9028. $traceurRuntime.superConstructor(YieldExpression).call(this, location);
  9029. this.expression = expression;
  9030. this.isYieldFor = isYieldFor;
  9031. }
  9032. return ($traceurRuntime.createClass)(YieldExpression, {
  9033. transform: function(transformer) {
  9034. return transformer.transformYieldExpression(this);
  9035. },
  9036. visit: function(visitor) {
  9037. visitor.visitYieldExpression(this);
  9038. },
  9039. get type() {
  9040. return YIELD_EXPRESSION;
  9041. }
  9042. }, {}, $__super);
  9043. }(ParseTree);
  9044. return {
  9045. get Annotation() {
  9046. return Annotation;
  9047. },
  9048. get AnonBlock() {
  9049. return AnonBlock;
  9050. },
  9051. get ArgumentList() {
  9052. return ArgumentList;
  9053. },
  9054. get ArrayComprehension() {
  9055. return ArrayComprehension;
  9056. },
  9057. get ArrayLiteral() {
  9058. return ArrayLiteral;
  9059. },
  9060. get ArrayPattern() {
  9061. return ArrayPattern;
  9062. },
  9063. get ArrayType() {
  9064. return ArrayType;
  9065. },
  9066. get ArrowFunction() {
  9067. return ArrowFunction;
  9068. },
  9069. get AssignmentElement() {
  9070. return AssignmentElement;
  9071. },
  9072. get AwaitExpression() {
  9073. return AwaitExpression;
  9074. },
  9075. get BinaryExpression() {
  9076. return BinaryExpression;
  9077. },
  9078. get BindingElement() {
  9079. return BindingElement;
  9080. },
  9081. get BindingIdentifier() {
  9082. return BindingIdentifier;
  9083. },
  9084. get Block() {
  9085. return Block;
  9086. },
  9087. get BreakStatement() {
  9088. return BreakStatement;
  9089. },
  9090. get CallExpression() {
  9091. return CallExpression;
  9092. },
  9093. get CallSignature() {
  9094. return CallSignature;
  9095. },
  9096. get CaseClause() {
  9097. return CaseClause;
  9098. },
  9099. get Catch() {
  9100. return Catch;
  9101. },
  9102. get ClassDeclaration() {
  9103. return ClassDeclaration;
  9104. },
  9105. get ClassExpression() {
  9106. return ClassExpression;
  9107. },
  9108. get CommaExpression() {
  9109. return CommaExpression;
  9110. },
  9111. get ComprehensionFor() {
  9112. return ComprehensionFor;
  9113. },
  9114. get ComprehensionIf() {
  9115. return ComprehensionIf;
  9116. },
  9117. get ComputedPropertyName() {
  9118. return ComputedPropertyName;
  9119. },
  9120. get ConditionalExpression() {
  9121. return ConditionalExpression;
  9122. },
  9123. get ConstructSignature() {
  9124. return ConstructSignature;
  9125. },
  9126. get ConstructorType() {
  9127. return ConstructorType;
  9128. },
  9129. get ContinueStatement() {
  9130. return ContinueStatement;
  9131. },
  9132. get CoverFormals() {
  9133. return CoverFormals;
  9134. },
  9135. get CoverInitializedName() {
  9136. return CoverInitializedName;
  9137. },
  9138. get DebuggerStatement() {
  9139. return DebuggerStatement;
  9140. },
  9141. get DefaultClause() {
  9142. return DefaultClause;
  9143. },
  9144. get DoWhileStatement() {
  9145. return DoWhileStatement;
  9146. },
  9147. get EmptyStatement() {
  9148. return EmptyStatement;
  9149. },
  9150. get ExportDeclaration() {
  9151. return ExportDeclaration;
  9152. },
  9153. get ExportDefault() {
  9154. return ExportDefault;
  9155. },
  9156. get ExportSpecifier() {
  9157. return ExportSpecifier;
  9158. },
  9159. get ExportSpecifierSet() {
  9160. return ExportSpecifierSet;
  9161. },
  9162. get ExportStar() {
  9163. return ExportStar;
  9164. },
  9165. get ExpressionStatement() {
  9166. return ExpressionStatement;
  9167. },
  9168. get Finally() {
  9169. return Finally;
  9170. },
  9171. get ForInStatement() {
  9172. return ForInStatement;
  9173. },
  9174. get ForOfStatement() {
  9175. return ForOfStatement;
  9176. },
  9177. get ForOnStatement() {
  9178. return ForOnStatement;
  9179. },
  9180. get ForStatement() {
  9181. return ForStatement;
  9182. },
  9183. get FormalParameter() {
  9184. return FormalParameter;
  9185. },
  9186. get FormalParameterList() {
  9187. return FormalParameterList;
  9188. },
  9189. get ForwardDefaultExport() {
  9190. return ForwardDefaultExport;
  9191. },
  9192. get FunctionBody() {
  9193. return FunctionBody;
  9194. },
  9195. get FunctionDeclaration() {
  9196. return FunctionDeclaration;
  9197. },
  9198. get FunctionExpression() {
  9199. return FunctionExpression;
  9200. },
  9201. get FunctionType() {
  9202. return FunctionType;
  9203. },
  9204. get GeneratorComprehension() {
  9205. return GeneratorComprehension;
  9206. },
  9207. get GetAccessor() {
  9208. return GetAccessor;
  9209. },
  9210. get IdentifierExpression() {
  9211. return IdentifierExpression;
  9212. },
  9213. get IfStatement() {
  9214. return IfStatement;
  9215. },
  9216. get ImportedBinding() {
  9217. return ImportedBinding;
  9218. },
  9219. get ImportClausePair() {
  9220. return ImportClausePair;
  9221. },
  9222. get ImportDeclaration() {
  9223. return ImportDeclaration;
  9224. },
  9225. get ImportSpecifier() {
  9226. return ImportSpecifier;
  9227. },
  9228. get ImportSpecifierSet() {
  9229. return ImportSpecifierSet;
  9230. },
  9231. get ImportTypeClause() {
  9232. return ImportTypeClause;
  9233. },
  9234. get IndexSignature() {
  9235. return IndexSignature;
  9236. },
  9237. get InterfaceDeclaration() {
  9238. return InterfaceDeclaration;
  9239. },
  9240. get JsxAttribute() {
  9241. return JsxAttribute;
  9242. },
  9243. get JsxElement() {
  9244. return JsxElement;
  9245. },
  9246. get JsxElementName() {
  9247. return JsxElementName;
  9248. },
  9249. get JsxPlaceholder() {
  9250. return JsxPlaceholder;
  9251. },
  9252. get JsxSpreadAttribute() {
  9253. return JsxSpreadAttribute;
  9254. },
  9255. get JsxText() {
  9256. return JsxText;
  9257. },
  9258. get LabelledStatement() {
  9259. return LabelledStatement;
  9260. },
  9261. get LiteralExpression() {
  9262. return LiteralExpression;
  9263. },
  9264. get LiteralPropertyName() {
  9265. return LiteralPropertyName;
  9266. },
  9267. get MemberExpression() {
  9268. return MemberExpression;
  9269. },
  9270. get MemberLookupExpression() {
  9271. return MemberLookupExpression;
  9272. },
  9273. get Method() {
  9274. return Method;
  9275. },
  9276. get MethodSignature() {
  9277. return MethodSignature;
  9278. },
  9279. get Module() {
  9280. return Module;
  9281. },
  9282. get ModuleSpecifier() {
  9283. return ModuleSpecifier;
  9284. },
  9285. get NameSpaceExport() {
  9286. return NameSpaceExport;
  9287. },
  9288. get NameSpaceImport() {
  9289. return NameSpaceImport;
  9290. },
  9291. get NamedExport() {
  9292. return NamedExport;
  9293. },
  9294. get NewExpression() {
  9295. return NewExpression;
  9296. },
  9297. get ObjectLiteral() {
  9298. return ObjectLiteral;
  9299. },
  9300. get ObjectPattern() {
  9301. return ObjectPattern;
  9302. },
  9303. get ObjectPatternField() {
  9304. return ObjectPatternField;
  9305. },
  9306. get ObjectType() {
  9307. return ObjectType;
  9308. },
  9309. get ParenExpression() {
  9310. return ParenExpression;
  9311. },
  9312. get PostfixExpression() {
  9313. return PostfixExpression;
  9314. },
  9315. get PredefinedType() {
  9316. return PredefinedType;
  9317. },
  9318. get Script() {
  9319. return Script;
  9320. },
  9321. get PropertyNameAssignment() {
  9322. return PropertyNameAssignment;
  9323. },
  9324. get PropertyNameShorthand() {
  9325. return PropertyNameShorthand;
  9326. },
  9327. get PropertyVariableDeclaration() {
  9328. return PropertyVariableDeclaration;
  9329. },
  9330. get PropertySignature() {
  9331. return PropertySignature;
  9332. },
  9333. get RestParameter() {
  9334. return RestParameter;
  9335. },
  9336. get ReturnStatement() {
  9337. return ReturnStatement;
  9338. },
  9339. get SetAccessor() {
  9340. return SetAccessor;
  9341. },
  9342. get SpreadExpression() {
  9343. return SpreadExpression;
  9344. },
  9345. get SpreadPatternElement() {
  9346. return SpreadPatternElement;
  9347. },
  9348. get SuperExpression() {
  9349. return SuperExpression;
  9350. },
  9351. get SwitchStatement() {
  9352. return SwitchStatement;
  9353. },
  9354. get SyntaxErrorTree() {
  9355. return SyntaxErrorTree;
  9356. },
  9357. get TemplateLiteralExpression() {
  9358. return TemplateLiteralExpression;
  9359. },
  9360. get TemplateLiteralPortion() {
  9361. return TemplateLiteralPortion;
  9362. },
  9363. get TemplateSubstitution() {
  9364. return TemplateSubstitution;
  9365. },
  9366. get ThisExpression() {
  9367. return ThisExpression;
  9368. },
  9369. get ThrowStatement() {
  9370. return ThrowStatement;
  9371. },
  9372. get TryStatement() {
  9373. return TryStatement;
  9374. },
  9375. get TypeAliasDeclaration() {
  9376. return TypeAliasDeclaration;
  9377. },
  9378. get TypeArguments() {
  9379. return TypeArguments;
  9380. },
  9381. get TypeName() {
  9382. return TypeName;
  9383. },
  9384. get TypeParameter() {
  9385. return TypeParameter;
  9386. },
  9387. get TypeParameters() {
  9388. return TypeParameters;
  9389. },
  9390. get TypeReference() {
  9391. return TypeReference;
  9392. },
  9393. get UnaryExpression() {
  9394. return UnaryExpression;
  9395. },
  9396. get UnionType() {
  9397. return UnionType;
  9398. },
  9399. get VariableDeclaration() {
  9400. return VariableDeclaration;
  9401. },
  9402. get VariableDeclarationList() {
  9403. return VariableDeclarationList;
  9404. },
  9405. get VariableStatement() {
  9406. return VariableStatement;
  9407. },
  9408. get WhileStatement() {
  9409. return WhileStatement;
  9410. },
  9411. get WithStatement() {
  9412. return WithStatement;
  9413. },
  9414. get YieldExpression() {
  9415. return YieldExpression;
  9416. }
  9417. };
  9418. });
  9419. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js", [], function() {
  9420. "use strict";
  9421. var __moduleName = "traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js";
  9422. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js")),
  9423. Annotation = $__2.Annotation,
  9424. AnonBlock = $__2.AnonBlock,
  9425. ArgumentList = $__2.ArgumentList,
  9426. ArrayComprehension = $__2.ArrayComprehension,
  9427. ArrayLiteral = $__2.ArrayLiteral,
  9428. ArrayPattern = $__2.ArrayPattern,
  9429. ArrayType = $__2.ArrayType,
  9430. ArrowFunction = $__2.ArrowFunction,
  9431. AssignmentElement = $__2.AssignmentElement,
  9432. AwaitExpression = $__2.AwaitExpression,
  9433. BinaryExpression = $__2.BinaryExpression,
  9434. BindingElement = $__2.BindingElement,
  9435. BindingIdentifier = $__2.BindingIdentifier,
  9436. Block = $__2.Block,
  9437. BreakStatement = $__2.BreakStatement,
  9438. CallExpression = $__2.CallExpression,
  9439. CallSignature = $__2.CallSignature,
  9440. CaseClause = $__2.CaseClause,
  9441. Catch = $__2.Catch,
  9442. ClassDeclaration = $__2.ClassDeclaration,
  9443. ClassExpression = $__2.ClassExpression,
  9444. CommaExpression = $__2.CommaExpression,
  9445. ComprehensionFor = $__2.ComprehensionFor,
  9446. ComprehensionIf = $__2.ComprehensionIf,
  9447. ComputedPropertyName = $__2.ComputedPropertyName,
  9448. ConditionalExpression = $__2.ConditionalExpression,
  9449. ConstructSignature = $__2.ConstructSignature,
  9450. ConstructorType = $__2.ConstructorType,
  9451. ContinueStatement = $__2.ContinueStatement,
  9452. CoverFormals = $__2.CoverFormals,
  9453. CoverInitializedName = $__2.CoverInitializedName,
  9454. DebuggerStatement = $__2.DebuggerStatement,
  9455. DefaultClause = $__2.DefaultClause,
  9456. DoWhileStatement = $__2.DoWhileStatement,
  9457. EmptyStatement = $__2.EmptyStatement,
  9458. ExportDeclaration = $__2.ExportDeclaration,
  9459. ExportDefault = $__2.ExportDefault,
  9460. ExportSpecifier = $__2.ExportSpecifier,
  9461. ExportSpecifierSet = $__2.ExportSpecifierSet,
  9462. ExportStar = $__2.ExportStar,
  9463. ExpressionStatement = $__2.ExpressionStatement,
  9464. Finally = $__2.Finally,
  9465. ForInStatement = $__2.ForInStatement,
  9466. ForOfStatement = $__2.ForOfStatement,
  9467. ForOnStatement = $__2.ForOnStatement,
  9468. ForStatement = $__2.ForStatement,
  9469. FormalParameter = $__2.FormalParameter,
  9470. FormalParameterList = $__2.FormalParameterList,
  9471. ForwardDefaultExport = $__2.ForwardDefaultExport,
  9472. FunctionBody = $__2.FunctionBody,
  9473. FunctionDeclaration = $__2.FunctionDeclaration,
  9474. FunctionExpression = $__2.FunctionExpression,
  9475. FunctionType = $__2.FunctionType,
  9476. GeneratorComprehension = $__2.GeneratorComprehension,
  9477. GetAccessor = $__2.GetAccessor,
  9478. IdentifierExpression = $__2.IdentifierExpression,
  9479. IfStatement = $__2.IfStatement,
  9480. ImportedBinding = $__2.ImportedBinding,
  9481. ImportClausePair = $__2.ImportClausePair,
  9482. ImportDeclaration = $__2.ImportDeclaration,
  9483. ImportSpecifier = $__2.ImportSpecifier,
  9484. ImportSpecifierSet = $__2.ImportSpecifierSet,
  9485. ImportTypeClause = $__2.ImportTypeClause,
  9486. IndexSignature = $__2.IndexSignature,
  9487. InterfaceDeclaration = $__2.InterfaceDeclaration,
  9488. JsxAttribute = $__2.JsxAttribute,
  9489. JsxElement = $__2.JsxElement,
  9490. JsxElementName = $__2.JsxElementName,
  9491. JsxPlaceholder = $__2.JsxPlaceholder,
  9492. JsxSpreadAttribute = $__2.JsxSpreadAttribute,
  9493. JsxText = $__2.JsxText,
  9494. LabelledStatement = $__2.LabelledStatement,
  9495. LiteralExpression = $__2.LiteralExpression,
  9496. LiteralPropertyName = $__2.LiteralPropertyName,
  9497. MemberExpression = $__2.MemberExpression,
  9498. MemberLookupExpression = $__2.MemberLookupExpression,
  9499. Method = $__2.Method,
  9500. MethodSignature = $__2.MethodSignature,
  9501. Module = $__2.Module,
  9502. ModuleSpecifier = $__2.ModuleSpecifier,
  9503. NameSpaceExport = $__2.NameSpaceExport,
  9504. NameSpaceImport = $__2.NameSpaceImport,
  9505. NamedExport = $__2.NamedExport,
  9506. NewExpression = $__2.NewExpression,
  9507. ObjectLiteral = $__2.ObjectLiteral,
  9508. ObjectPattern = $__2.ObjectPattern,
  9509. ObjectPatternField = $__2.ObjectPatternField,
  9510. ObjectType = $__2.ObjectType,
  9511. ParenExpression = $__2.ParenExpression,
  9512. PostfixExpression = $__2.PostfixExpression,
  9513. PredefinedType = $__2.PredefinedType,
  9514. Script = $__2.Script,
  9515. PropertyNameAssignment = $__2.PropertyNameAssignment,
  9516. PropertyNameShorthand = $__2.PropertyNameShorthand,
  9517. PropertyVariableDeclaration = $__2.PropertyVariableDeclaration,
  9518. PropertySignature = $__2.PropertySignature,
  9519. RestParameter = $__2.RestParameter,
  9520. ReturnStatement = $__2.ReturnStatement,
  9521. SetAccessor = $__2.SetAccessor,
  9522. SpreadExpression = $__2.SpreadExpression,
  9523. SpreadPatternElement = $__2.SpreadPatternElement,
  9524. SuperExpression = $__2.SuperExpression,
  9525. SwitchStatement = $__2.SwitchStatement,
  9526. SyntaxErrorTree = $__2.SyntaxErrorTree,
  9527. TemplateLiteralExpression = $__2.TemplateLiteralExpression,
  9528. TemplateLiteralPortion = $__2.TemplateLiteralPortion,
  9529. TemplateSubstitution = $__2.TemplateSubstitution,
  9530. ThisExpression = $__2.ThisExpression,
  9531. ThrowStatement = $__2.ThrowStatement,
  9532. TryStatement = $__2.TryStatement,
  9533. TypeAliasDeclaration = $__2.TypeAliasDeclaration,
  9534. TypeArguments = $__2.TypeArguments,
  9535. TypeName = $__2.TypeName,
  9536. TypeParameter = $__2.TypeParameter,
  9537. TypeParameters = $__2.TypeParameters,
  9538. TypeReference = $__2.TypeReference,
  9539. UnaryExpression = $__2.UnaryExpression,
  9540. UnionType = $__2.UnionType,
  9541. VariableDeclaration = $__2.VariableDeclaration,
  9542. VariableDeclarationList = $__2.VariableDeclarationList,
  9543. VariableStatement = $__2.VariableStatement,
  9544. WhileStatement = $__2.WhileStatement,
  9545. WithStatement = $__2.WithStatement,
  9546. YieldExpression = $__2.YieldExpression;
  9547. var ParseTreeTransformer = function() {
  9548. function ParseTreeTransformer() {}
  9549. return ($traceurRuntime.createClass)(ParseTreeTransformer, {
  9550. transformAny: function(tree) {
  9551. return tree === null ? null : tree.transform(this);
  9552. },
  9553. transformList: function(list) {
  9554. var $__1;
  9555. var builder = null;
  9556. for (var index = 0; index < list.length; index++) {
  9557. var element = list[index];
  9558. var transformed = this.transformAny(element);
  9559. if (builder != null || element != transformed) {
  9560. if (builder === null) {
  9561. builder = list.slice(0, index);
  9562. }
  9563. if (transformed instanceof AnonBlock)
  9564. ($__1 = builder).push.apply($__1, $traceurRuntime.spread(transformed.statements));
  9565. else
  9566. builder.push(transformed);
  9567. }
  9568. }
  9569. return builder || list;
  9570. },
  9571. transformStateMachine: function(tree) {
  9572. throw Error('State machines should not live outside of the GeneratorTransformer.');
  9573. },
  9574. transformToBlockOrStatement: function(tree) {
  9575. var transformed = this.transformAny(tree);
  9576. if (transformed instanceof AnonBlock) {
  9577. return new Block(transformed.location, transformed.statements);
  9578. }
  9579. return transformed;
  9580. },
  9581. transformAnnotation: function(tree) {
  9582. var name = this.transformAny(tree.name);
  9583. var args = this.transformAny(tree.args);
  9584. if (name === tree.name && args === tree.args) {
  9585. return tree;
  9586. }
  9587. return new Annotation(tree.location, name, args);
  9588. },
  9589. transformAnonBlock: function(tree) {
  9590. var statements = this.transformList(tree.statements);
  9591. if (statements === tree.statements) {
  9592. return tree;
  9593. }
  9594. return new AnonBlock(tree.location, statements);
  9595. },
  9596. transformArgumentList: function(tree) {
  9597. var args = this.transformList(tree.args);
  9598. if (args === tree.args) {
  9599. return tree;
  9600. }
  9601. return new ArgumentList(tree.location, args);
  9602. },
  9603. transformArrayComprehension: function(tree) {
  9604. var comprehensionList = this.transformList(tree.comprehensionList);
  9605. var expression = this.transformAny(tree.expression);
  9606. if (comprehensionList === tree.comprehensionList && expression === tree.expression) {
  9607. return tree;
  9608. }
  9609. return new ArrayComprehension(tree.location, comprehensionList, expression);
  9610. },
  9611. transformArrayLiteral: function(tree) {
  9612. var elements = this.transformList(tree.elements);
  9613. if (elements === tree.elements) {
  9614. return tree;
  9615. }
  9616. return new ArrayLiteral(tree.location, elements);
  9617. },
  9618. transformArrayPattern: function(tree) {
  9619. var elements = this.transformList(tree.elements);
  9620. if (elements === tree.elements) {
  9621. return tree;
  9622. }
  9623. return new ArrayPattern(tree.location, elements);
  9624. },
  9625. transformArrayType: function(tree) {
  9626. var elementType = this.transformAny(tree.elementType);
  9627. if (elementType === tree.elementType) {
  9628. return tree;
  9629. }
  9630. return new ArrayType(tree.location, elementType);
  9631. },
  9632. transformArrowFunction: function(tree) {
  9633. var parameterList = this.transformAny(tree.parameterList);
  9634. var body = this.transformAny(tree.body);
  9635. if (parameterList === tree.parameterList && body === tree.body) {
  9636. return tree;
  9637. }
  9638. return new ArrowFunction(tree.location, tree.functionKind, parameterList, body);
  9639. },
  9640. transformAssignmentElement: function(tree) {
  9641. var assignment = this.transformAny(tree.assignment);
  9642. var initializer = this.transformAny(tree.initializer);
  9643. if (assignment === tree.assignment && initializer === tree.initializer) {
  9644. return tree;
  9645. }
  9646. return new AssignmentElement(tree.location, assignment, initializer);
  9647. },
  9648. transformAwaitExpression: function(tree) {
  9649. var expression = this.transformAny(tree.expression);
  9650. if (expression === tree.expression) {
  9651. return tree;
  9652. }
  9653. return new AwaitExpression(tree.location, expression);
  9654. },
  9655. transformBinaryExpression: function(tree) {
  9656. var left = this.transformAny(tree.left);
  9657. var right = this.transformAny(tree.right);
  9658. if (left === tree.left && right === tree.right) {
  9659. return tree;
  9660. }
  9661. return new BinaryExpression(tree.location, left, tree.operator, right);
  9662. },
  9663. transformBindingElement: function(tree) {
  9664. var binding = this.transformAny(tree.binding);
  9665. var initializer = this.transformAny(tree.initializer);
  9666. if (binding === tree.binding && initializer === tree.initializer) {
  9667. return tree;
  9668. }
  9669. return new BindingElement(tree.location, binding, initializer);
  9670. },
  9671. transformBindingIdentifier: function(tree) {
  9672. return tree;
  9673. },
  9674. transformBlock: function(tree) {
  9675. var statements = this.transformList(tree.statements);
  9676. if (statements === tree.statements) {
  9677. return tree;
  9678. }
  9679. return new Block(tree.location, statements);
  9680. },
  9681. transformBreakStatement: function(tree) {
  9682. return tree;
  9683. },
  9684. transformCallExpression: function(tree) {
  9685. var operand = this.transformAny(tree.operand);
  9686. var args = this.transformAny(tree.args);
  9687. if (operand === tree.operand && args === tree.args) {
  9688. return tree;
  9689. }
  9690. return new CallExpression(tree.location, operand, args);
  9691. },
  9692. transformCallSignature: function(tree) {
  9693. var typeParameters = this.transformAny(tree.typeParameters);
  9694. var parameterList = this.transformAny(tree.parameterList);
  9695. var returnType = this.transformAny(tree.returnType);
  9696. if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) {
  9697. return tree;
  9698. }
  9699. return new CallSignature(tree.location, typeParameters, parameterList, returnType);
  9700. },
  9701. transformCaseClause: function(tree) {
  9702. var expression = this.transformAny(tree.expression);
  9703. var statements = this.transformList(tree.statements);
  9704. if (expression === tree.expression && statements === tree.statements) {
  9705. return tree;
  9706. }
  9707. return new CaseClause(tree.location, expression, statements);
  9708. },
  9709. transformCatch: function(tree) {
  9710. var binding = this.transformAny(tree.binding);
  9711. var catchBody = this.transformAny(tree.catchBody);
  9712. if (binding === tree.binding && catchBody === tree.catchBody) {
  9713. return tree;
  9714. }
  9715. return new Catch(tree.location, binding, catchBody);
  9716. },
  9717. transformClassDeclaration: function(tree) {
  9718. var name = this.transformAny(tree.name);
  9719. var superClass = this.transformAny(tree.superClass);
  9720. var elements = this.transformList(tree.elements);
  9721. var annotations = this.transformList(tree.annotations);
  9722. var typeParameters = this.transformAny(tree.typeParameters);
  9723. if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations && typeParameters === tree.typeParameters) {
  9724. return tree;
  9725. }
  9726. return new ClassDeclaration(tree.location, name, superClass, elements, annotations, typeParameters);
  9727. },
  9728. transformClassExpression: function(tree) {
  9729. var name = this.transformAny(tree.name);
  9730. var superClass = this.transformAny(tree.superClass);
  9731. var elements = this.transformList(tree.elements);
  9732. var annotations = this.transformList(tree.annotations);
  9733. var typeParameters = this.transformAny(tree.typeParameters);
  9734. if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations && typeParameters === tree.typeParameters) {
  9735. return tree;
  9736. }
  9737. return new ClassExpression(tree.location, name, superClass, elements, annotations, typeParameters);
  9738. },
  9739. transformCommaExpression: function(tree) {
  9740. var expressions = this.transformList(tree.expressions);
  9741. if (expressions === tree.expressions) {
  9742. return tree;
  9743. }
  9744. return new CommaExpression(tree.location, expressions);
  9745. },
  9746. transformComprehensionFor: function(tree) {
  9747. var left = this.transformAny(tree.left);
  9748. var iterator = this.transformAny(tree.iterator);
  9749. if (left === tree.left && iterator === tree.iterator) {
  9750. return tree;
  9751. }
  9752. return new ComprehensionFor(tree.location, left, iterator);
  9753. },
  9754. transformComprehensionIf: function(tree) {
  9755. var expression = this.transformAny(tree.expression);
  9756. if (expression === tree.expression) {
  9757. return tree;
  9758. }
  9759. return new ComprehensionIf(tree.location, expression);
  9760. },
  9761. transformComputedPropertyName: function(tree) {
  9762. var expression = this.transformAny(tree.expression);
  9763. if (expression === tree.expression) {
  9764. return tree;
  9765. }
  9766. return new ComputedPropertyName(tree.location, expression);
  9767. },
  9768. transformConditionalExpression: function(tree) {
  9769. var condition = this.transformAny(tree.condition);
  9770. var left = this.transformAny(tree.left);
  9771. var right = this.transformAny(tree.right);
  9772. if (condition === tree.condition && left === tree.left && right === tree.right) {
  9773. return tree;
  9774. }
  9775. return new ConditionalExpression(tree.location, condition, left, right);
  9776. },
  9777. transformConstructSignature: function(tree) {
  9778. var typeParameters = this.transformAny(tree.typeParameters);
  9779. var parameterList = this.transformAny(tree.parameterList);
  9780. var returnType = this.transformAny(tree.returnType);
  9781. if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) {
  9782. return tree;
  9783. }
  9784. return new ConstructSignature(tree.location, typeParameters, parameterList, returnType);
  9785. },
  9786. transformConstructorType: function(tree) {
  9787. var typeParameters = this.transformAny(tree.typeParameters);
  9788. var parameterList = this.transformAny(tree.parameterList);
  9789. var returnType = this.transformAny(tree.returnType);
  9790. if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) {
  9791. return tree;
  9792. }
  9793. return new ConstructorType(tree.location, typeParameters, parameterList, returnType);
  9794. },
  9795. transformContinueStatement: function(tree) {
  9796. return tree;
  9797. },
  9798. transformCoverFormals: function(tree) {
  9799. var expressions = this.transformList(tree.expressions);
  9800. if (expressions === tree.expressions) {
  9801. return tree;
  9802. }
  9803. return new CoverFormals(tree.location, expressions);
  9804. },
  9805. transformCoverInitializedName: function(tree) {
  9806. var initializer = this.transformAny(tree.initializer);
  9807. if (initializer === tree.initializer) {
  9808. return tree;
  9809. }
  9810. return new CoverInitializedName(tree.location, tree.name, tree.equalToken, initializer);
  9811. },
  9812. transformDebuggerStatement: function(tree) {
  9813. return tree;
  9814. },
  9815. transformDefaultClause: function(tree) {
  9816. var statements = this.transformList(tree.statements);
  9817. if (statements === tree.statements) {
  9818. return tree;
  9819. }
  9820. return new DefaultClause(tree.location, statements);
  9821. },
  9822. transformDoWhileStatement: function(tree) {
  9823. var body = this.transformToBlockOrStatement(tree.body);
  9824. var condition = this.transformAny(tree.condition);
  9825. if (body === tree.body && condition === tree.condition) {
  9826. return tree;
  9827. }
  9828. return new DoWhileStatement(tree.location, body, condition);
  9829. },
  9830. transformEmptyStatement: function(tree) {
  9831. return tree;
  9832. },
  9833. transformExportDeclaration: function(tree) {
  9834. var declaration = this.transformAny(tree.declaration);
  9835. var annotations = this.transformList(tree.annotations);
  9836. if (declaration === tree.declaration && annotations === tree.annotations) {
  9837. return tree;
  9838. }
  9839. return new ExportDeclaration(tree.location, declaration, annotations);
  9840. },
  9841. transformExportDefault: function(tree) {
  9842. var expression = this.transformAny(tree.expression);
  9843. if (expression === tree.expression) {
  9844. return tree;
  9845. }
  9846. return new ExportDefault(tree.location, expression);
  9847. },
  9848. transformExportSpecifier: function(tree) {
  9849. return tree;
  9850. },
  9851. transformExportSpecifierSet: function(tree) {
  9852. var specifiers = this.transformList(tree.specifiers);
  9853. if (specifiers === tree.specifiers) {
  9854. return tree;
  9855. }
  9856. return new ExportSpecifierSet(tree.location, specifiers);
  9857. },
  9858. transformExportStar: function(tree) {
  9859. return tree;
  9860. },
  9861. transformExpressionStatement: function(tree) {
  9862. var expression = this.transformAny(tree.expression);
  9863. if (expression === tree.expression) {
  9864. return tree;
  9865. }
  9866. return new ExpressionStatement(tree.location, expression);
  9867. },
  9868. transformFinally: function(tree) {
  9869. var block = this.transformAny(tree.block);
  9870. if (block === tree.block) {
  9871. return tree;
  9872. }
  9873. return new Finally(tree.location, block);
  9874. },
  9875. transformForInStatement: function(tree) {
  9876. var initializer = this.transformAny(tree.initializer);
  9877. var collection = this.transformAny(tree.collection);
  9878. var body = this.transformToBlockOrStatement(tree.body);
  9879. if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {
  9880. return tree;
  9881. }
  9882. return new ForInStatement(tree.location, initializer, collection, body);
  9883. },
  9884. transformForOfStatement: function(tree) {
  9885. var initializer = this.transformAny(tree.initializer);
  9886. var collection = this.transformAny(tree.collection);
  9887. var body = this.transformToBlockOrStatement(tree.body);
  9888. if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {
  9889. return tree;
  9890. }
  9891. return new ForOfStatement(tree.location, initializer, collection, body);
  9892. },
  9893. transformForOnStatement: function(tree) {
  9894. var initializer = this.transformAny(tree.initializer);
  9895. var observable = this.transformAny(tree.observable);
  9896. var body = this.transformToBlockOrStatement(tree.body);
  9897. if (initializer === tree.initializer && observable === tree.observable && body === tree.body) {
  9898. return tree;
  9899. }
  9900. return new ForOnStatement(tree.location, initializer, observable, body);
  9901. },
  9902. transformForStatement: function(tree) {
  9903. var initializer = this.transformAny(tree.initializer);
  9904. var condition = this.transformAny(tree.condition);
  9905. var increment = this.transformAny(tree.increment);
  9906. var body = this.transformToBlockOrStatement(tree.body);
  9907. if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {
  9908. return tree;
  9909. }
  9910. return new ForStatement(tree.location, initializer, condition, increment, body);
  9911. },
  9912. transformFormalParameter: function(tree) {
  9913. var parameter = this.transformAny(tree.parameter);
  9914. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  9915. var annotations = this.transformList(tree.annotations);
  9916. if (parameter === tree.parameter && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations) {
  9917. return tree;
  9918. }
  9919. return new FormalParameter(tree.location, parameter, typeAnnotation, annotations);
  9920. },
  9921. transformFormalParameterList: function(tree) {
  9922. var parameters = this.transformList(tree.parameters);
  9923. if (parameters === tree.parameters) {
  9924. return tree;
  9925. }
  9926. return new FormalParameterList(tree.location, parameters);
  9927. },
  9928. transformForwardDefaultExport: function(tree) {
  9929. return tree;
  9930. },
  9931. transformFunctionBody: function(tree) {
  9932. var statements = this.transformList(tree.statements);
  9933. if (statements === tree.statements) {
  9934. return tree;
  9935. }
  9936. return new FunctionBody(tree.location, statements);
  9937. },
  9938. transformFunctionDeclaration: function(tree) {
  9939. var name = this.transformAny(tree.name);
  9940. var parameterList = this.transformAny(tree.parameterList);
  9941. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  9942. var annotations = this.transformList(tree.annotations);
  9943. var body = this.transformAny(tree.body);
  9944. if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  9945. return tree;
  9946. }
  9947. return new FunctionDeclaration(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);
  9948. },
  9949. transformFunctionExpression: function(tree) {
  9950. var name = this.transformAny(tree.name);
  9951. var parameterList = this.transformAny(tree.parameterList);
  9952. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  9953. var annotations = this.transformList(tree.annotations);
  9954. var body = this.transformAny(tree.body);
  9955. if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  9956. return tree;
  9957. }
  9958. return new FunctionExpression(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);
  9959. },
  9960. transformFunctionType: function(tree) {
  9961. var typeParameters = this.transformAny(tree.typeParameters);
  9962. var parameterList = this.transformAny(tree.parameterList);
  9963. var returnType = this.transformAny(tree.returnType);
  9964. if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) {
  9965. return tree;
  9966. }
  9967. return new FunctionType(tree.location, typeParameters, parameterList, returnType);
  9968. },
  9969. transformGeneratorComprehension: function(tree) {
  9970. var comprehensionList = this.transformList(tree.comprehensionList);
  9971. var expression = this.transformAny(tree.expression);
  9972. if (comprehensionList === tree.comprehensionList && expression === tree.expression) {
  9973. return tree;
  9974. }
  9975. return new GeneratorComprehension(tree.location, comprehensionList, expression);
  9976. },
  9977. transformGetAccessor: function(tree) {
  9978. var name = this.transformAny(tree.name);
  9979. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  9980. var annotations = this.transformList(tree.annotations);
  9981. var body = this.transformAny(tree.body);
  9982. if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  9983. return tree;
  9984. }
  9985. return new GetAccessor(tree.location, tree.isStatic, name, typeAnnotation, annotations, body);
  9986. },
  9987. transformIdentifierExpression: function(tree) {
  9988. return tree;
  9989. },
  9990. transformIfStatement: function(tree) {
  9991. var condition = this.transformAny(tree.condition);
  9992. var ifClause = this.transformToBlockOrStatement(tree.ifClause);
  9993. var elseClause = this.transformToBlockOrStatement(tree.elseClause);
  9994. if (condition === tree.condition && ifClause === tree.ifClause && elseClause === tree.elseClause) {
  9995. return tree;
  9996. }
  9997. return new IfStatement(tree.location, condition, ifClause, elseClause);
  9998. },
  9999. transformImportedBinding: function(tree) {
  10000. var binding = this.transformAny(tree.binding);
  10001. if (binding === tree.binding) {
  10002. return tree;
  10003. }
  10004. return new ImportedBinding(tree.location, binding);
  10005. },
  10006. transformImportClausePair: function(tree) {
  10007. var first = this.transformAny(tree.first);
  10008. var second = this.transformAny(tree.second);
  10009. if (first === tree.first && second === tree.second) {
  10010. return tree;
  10011. }
  10012. return new ImportClausePair(tree.location, first, second);
  10013. },
  10014. transformImportDeclaration: function(tree) {
  10015. var importClause = this.transformAny(tree.importClause);
  10016. var moduleSpecifier = this.transformAny(tree.moduleSpecifier);
  10017. if (importClause === tree.importClause && moduleSpecifier === tree.moduleSpecifier) {
  10018. return tree;
  10019. }
  10020. return new ImportDeclaration(tree.location, importClause, moduleSpecifier);
  10021. },
  10022. transformImportSpecifier: function(tree) {
  10023. var binding = this.transformAny(tree.binding);
  10024. if (binding === tree.binding) {
  10025. return tree;
  10026. }
  10027. return new ImportSpecifier(tree.location, binding, tree.name);
  10028. },
  10029. transformImportSpecifierSet: function(tree) {
  10030. var specifiers = this.transformList(tree.specifiers);
  10031. if (specifiers === tree.specifiers) {
  10032. return tree;
  10033. }
  10034. return new ImportSpecifierSet(tree.location, specifiers);
  10035. },
  10036. transformImportTypeClause: function(tree) {
  10037. var clause = this.transformAny(tree.clause);
  10038. if (clause === tree.clause) {
  10039. return tree;
  10040. }
  10041. return new ImportTypeClause(tree.location, clause);
  10042. },
  10043. transformIndexSignature: function(tree) {
  10044. var indexType = this.transformAny(tree.indexType);
  10045. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  10046. if (indexType === tree.indexType && typeAnnotation === tree.typeAnnotation) {
  10047. return tree;
  10048. }
  10049. return new IndexSignature(tree.location, tree.name, indexType, typeAnnotation);
  10050. },
  10051. transformInterfaceDeclaration: function(tree) {
  10052. var typeParameters = this.transformAny(tree.typeParameters);
  10053. var objectType = this.transformAny(tree.objectType);
  10054. if (typeParameters === tree.typeParameters && objectType === tree.objectType) {
  10055. return tree;
  10056. }
  10057. return new InterfaceDeclaration(tree.location, tree.name, typeParameters, tree.extendsClause, objectType);
  10058. },
  10059. transformJsxAttribute: function(tree) {
  10060. var value = this.transformAny(tree.value);
  10061. if (value === tree.value) {
  10062. return tree;
  10063. }
  10064. return new JsxAttribute(tree.location, tree.name, value);
  10065. },
  10066. transformJsxElement: function(tree) {
  10067. var name = this.transformAny(tree.name);
  10068. var attributes = this.transformList(tree.attributes);
  10069. var children = this.transformList(tree.children);
  10070. if (name === tree.name && attributes === tree.attributes && children === tree.children) {
  10071. return tree;
  10072. }
  10073. return new JsxElement(tree.location, name, attributes, children);
  10074. },
  10075. transformJsxElementName: function(tree) {
  10076. return tree;
  10077. },
  10078. transformJsxPlaceholder: function(tree) {
  10079. var expression = this.transformAny(tree.expression);
  10080. if (expression === tree.expression) {
  10081. return tree;
  10082. }
  10083. return new JsxPlaceholder(tree.location, expression);
  10084. },
  10085. transformJsxSpreadAttribute: function(tree) {
  10086. var expression = this.transformAny(tree.expression);
  10087. if (expression === tree.expression) {
  10088. return tree;
  10089. }
  10090. return new JsxSpreadAttribute(tree.location, expression);
  10091. },
  10092. transformJsxText: function(tree) {
  10093. return tree;
  10094. },
  10095. transformLabelledStatement: function(tree) {
  10096. var statement = this.transformAny(tree.statement);
  10097. if (statement === tree.statement) {
  10098. return tree;
  10099. }
  10100. return new LabelledStatement(tree.location, tree.name, statement);
  10101. },
  10102. transformLiteralExpression: function(tree) {
  10103. return tree;
  10104. },
  10105. transformLiteralPropertyName: function(tree) {
  10106. return tree;
  10107. },
  10108. transformMemberExpression: function(tree) {
  10109. var operand = this.transformAny(tree.operand);
  10110. if (operand === tree.operand) {
  10111. return tree;
  10112. }
  10113. return new MemberExpression(tree.location, operand, tree.memberName);
  10114. },
  10115. transformMemberLookupExpression: function(tree) {
  10116. var operand = this.transformAny(tree.operand);
  10117. var memberExpression = this.transformAny(tree.memberExpression);
  10118. if (operand === tree.operand && memberExpression === tree.memberExpression) {
  10119. return tree;
  10120. }
  10121. return new MemberLookupExpression(tree.location, operand, memberExpression);
  10122. },
  10123. transformMethod: function(tree) {
  10124. var name = this.transformAny(tree.name);
  10125. var parameterList = this.transformAny(tree.parameterList);
  10126. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  10127. var annotations = this.transformList(tree.annotations);
  10128. var body = this.transformAny(tree.body);
  10129. var debugName = this.transformAny(tree.debugName);
  10130. if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body && debugName === tree.debugName) {
  10131. return tree;
  10132. }
  10133. return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, typeAnnotation, annotations, body, debugName);
  10134. },
  10135. transformMethodSignature: function(tree) {
  10136. var name = this.transformAny(tree.name);
  10137. var callSignature = this.transformAny(tree.callSignature);
  10138. if (name === tree.name && callSignature === tree.callSignature) {
  10139. return tree;
  10140. }
  10141. return new MethodSignature(tree.location, name, tree.optional, callSignature);
  10142. },
  10143. transformModule: function(tree) {
  10144. var scriptItemList = this.transformList(tree.scriptItemList);
  10145. if (scriptItemList === tree.scriptItemList) {
  10146. return tree;
  10147. }
  10148. return new Module(tree.location, scriptItemList, tree.moduleName);
  10149. },
  10150. transformModuleSpecifier: function(tree) {
  10151. return tree;
  10152. },
  10153. transformNameSpaceExport: function(tree) {
  10154. return tree;
  10155. },
  10156. transformNameSpaceImport: function(tree) {
  10157. var binding = this.transformAny(tree.binding);
  10158. if (binding === tree.binding) {
  10159. return tree;
  10160. }
  10161. return new NameSpaceImport(tree.location, binding);
  10162. },
  10163. transformNamedExport: function(tree) {
  10164. var exportClause = this.transformAny(tree.exportClause);
  10165. var moduleSpecifier = this.transformAny(tree.moduleSpecifier);
  10166. if (exportClause === tree.exportClause && moduleSpecifier === tree.moduleSpecifier) {
  10167. return tree;
  10168. }
  10169. return new NamedExport(tree.location, exportClause, moduleSpecifier);
  10170. },
  10171. transformNewExpression: function(tree) {
  10172. var operand = this.transformAny(tree.operand);
  10173. var args = this.transformAny(tree.args);
  10174. if (operand === tree.operand && args === tree.args) {
  10175. return tree;
  10176. }
  10177. return new NewExpression(tree.location, operand, args);
  10178. },
  10179. transformObjectLiteral: function(tree) {
  10180. var propertyNameAndValues = this.transformList(tree.propertyNameAndValues);
  10181. if (propertyNameAndValues === tree.propertyNameAndValues) {
  10182. return tree;
  10183. }
  10184. return new ObjectLiteral(tree.location, propertyNameAndValues);
  10185. },
  10186. transformObjectPattern: function(tree) {
  10187. var fields = this.transformList(tree.fields);
  10188. if (fields === tree.fields) {
  10189. return tree;
  10190. }
  10191. return new ObjectPattern(tree.location, fields);
  10192. },
  10193. transformObjectPatternField: function(tree) {
  10194. var name = this.transformAny(tree.name);
  10195. var element = this.transformAny(tree.element);
  10196. if (name === tree.name && element === tree.element) {
  10197. return tree;
  10198. }
  10199. return new ObjectPatternField(tree.location, name, element);
  10200. },
  10201. transformObjectType: function(tree) {
  10202. var typeMembers = this.transformList(tree.typeMembers);
  10203. if (typeMembers === tree.typeMembers) {
  10204. return tree;
  10205. }
  10206. return new ObjectType(tree.location, typeMembers);
  10207. },
  10208. transformParenExpression: function(tree) {
  10209. var expression = this.transformAny(tree.expression);
  10210. if (expression === tree.expression) {
  10211. return tree;
  10212. }
  10213. return new ParenExpression(tree.location, expression);
  10214. },
  10215. transformPostfixExpression: function(tree) {
  10216. var operand = this.transformAny(tree.operand);
  10217. if (operand === tree.operand) {
  10218. return tree;
  10219. }
  10220. return new PostfixExpression(tree.location, operand, tree.operator);
  10221. },
  10222. transformPredefinedType: function(tree) {
  10223. return tree;
  10224. },
  10225. transformScript: function(tree) {
  10226. var scriptItemList = this.transformList(tree.scriptItemList);
  10227. if (scriptItemList === tree.scriptItemList) {
  10228. return tree;
  10229. }
  10230. return new Script(tree.location, scriptItemList, tree.moduleName);
  10231. },
  10232. transformPropertyNameAssignment: function(tree) {
  10233. var name = this.transformAny(tree.name);
  10234. var value = this.transformAny(tree.value);
  10235. if (name === tree.name && value === tree.value) {
  10236. return tree;
  10237. }
  10238. return new PropertyNameAssignment(tree.location, name, value);
  10239. },
  10240. transformPropertyNameShorthand: function(tree) {
  10241. return tree;
  10242. },
  10243. transformPropertyVariableDeclaration: function(tree) {
  10244. var name = this.transformAny(tree.name);
  10245. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  10246. var annotations = this.transformList(tree.annotations);
  10247. var initializer = this.transformAny(tree.initializer);
  10248. if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && initializer === tree.initializer) {
  10249. return tree;
  10250. }
  10251. return new PropertyVariableDeclaration(tree.location, tree.isStatic, name, typeAnnotation, annotations, initializer);
  10252. },
  10253. transformPropertySignature: function(tree) {
  10254. var name = this.transformAny(tree.name);
  10255. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  10256. if (name === tree.name && typeAnnotation === tree.typeAnnotation) {
  10257. return tree;
  10258. }
  10259. return new PropertySignature(tree.location, name, tree.optional, typeAnnotation);
  10260. },
  10261. transformRestParameter: function(tree) {
  10262. var identifier = this.transformAny(tree.identifier);
  10263. if (identifier === tree.identifier) {
  10264. return tree;
  10265. }
  10266. return new RestParameter(tree.location, identifier);
  10267. },
  10268. transformReturnStatement: function(tree) {
  10269. var expression = this.transformAny(tree.expression);
  10270. if (expression === tree.expression) {
  10271. return tree;
  10272. }
  10273. return new ReturnStatement(tree.location, expression);
  10274. },
  10275. transformSetAccessor: function(tree) {
  10276. var name = this.transformAny(tree.name);
  10277. var parameterList = this.transformAny(tree.parameterList);
  10278. var annotations = this.transformList(tree.annotations);
  10279. var body = this.transformAny(tree.body);
  10280. if (name === tree.name && parameterList === tree.parameterList && annotations === tree.annotations && body === tree.body) {
  10281. return tree;
  10282. }
  10283. return new SetAccessor(tree.location, tree.isStatic, name, parameterList, annotations, body);
  10284. },
  10285. transformSpreadExpression: function(tree) {
  10286. var expression = this.transformAny(tree.expression);
  10287. if (expression === tree.expression) {
  10288. return tree;
  10289. }
  10290. return new SpreadExpression(tree.location, expression);
  10291. },
  10292. transformSpreadPatternElement: function(tree) {
  10293. var lvalue = this.transformAny(tree.lvalue);
  10294. if (lvalue === tree.lvalue) {
  10295. return tree;
  10296. }
  10297. return new SpreadPatternElement(tree.location, lvalue);
  10298. },
  10299. transformSuperExpression: function(tree) {
  10300. return tree;
  10301. },
  10302. transformSwitchStatement: function(tree) {
  10303. var expression = this.transformAny(tree.expression);
  10304. var caseClauses = this.transformList(tree.caseClauses);
  10305. if (expression === tree.expression && caseClauses === tree.caseClauses) {
  10306. return tree;
  10307. }
  10308. return new SwitchStatement(tree.location, expression, caseClauses);
  10309. },
  10310. transformSyntaxErrorTree: function(tree) {
  10311. return tree;
  10312. },
  10313. transformTemplateLiteralExpression: function(tree) {
  10314. var operand = this.transformAny(tree.operand);
  10315. var elements = this.transformList(tree.elements);
  10316. if (operand === tree.operand && elements === tree.elements) {
  10317. return tree;
  10318. }
  10319. return new TemplateLiteralExpression(tree.location, operand, elements);
  10320. },
  10321. transformTemplateLiteralPortion: function(tree) {
  10322. return tree;
  10323. },
  10324. transformTemplateSubstitution: function(tree) {
  10325. var expression = this.transformAny(tree.expression);
  10326. if (expression === tree.expression) {
  10327. return tree;
  10328. }
  10329. return new TemplateSubstitution(tree.location, expression);
  10330. },
  10331. transformThisExpression: function(tree) {
  10332. return tree;
  10333. },
  10334. transformThrowStatement: function(tree) {
  10335. var value = this.transformAny(tree.value);
  10336. if (value === tree.value) {
  10337. return tree;
  10338. }
  10339. return new ThrowStatement(tree.location, value);
  10340. },
  10341. transformTryStatement: function(tree) {
  10342. var body = this.transformAny(tree.body);
  10343. var catchBlock = this.transformAny(tree.catchBlock);
  10344. var finallyBlock = this.transformAny(tree.finallyBlock);
  10345. if (body === tree.body && catchBlock === tree.catchBlock && finallyBlock === tree.finallyBlock) {
  10346. return tree;
  10347. }
  10348. return new TryStatement(tree.location, body, catchBlock, finallyBlock);
  10349. },
  10350. transformTypeAliasDeclaration: function(tree) {
  10351. var value = this.transformAny(tree.value);
  10352. if (value === tree.value) {
  10353. return tree;
  10354. }
  10355. return new TypeAliasDeclaration(tree.location, tree.name, value);
  10356. },
  10357. transformTypeArguments: function(tree) {
  10358. var args = this.transformList(tree.args);
  10359. if (args === tree.args) {
  10360. return tree;
  10361. }
  10362. return new TypeArguments(tree.location, args);
  10363. },
  10364. transformTypeName: function(tree) {
  10365. var moduleName = this.transformAny(tree.moduleName);
  10366. if (moduleName === tree.moduleName) {
  10367. return tree;
  10368. }
  10369. return new TypeName(tree.location, moduleName, tree.name);
  10370. },
  10371. transformTypeParameter: function(tree) {
  10372. var extendsType = this.transformAny(tree.extendsType);
  10373. if (extendsType === tree.extendsType) {
  10374. return tree;
  10375. }
  10376. return new TypeParameter(tree.location, tree.identifierToken, extendsType);
  10377. },
  10378. transformTypeParameters: function(tree) {
  10379. var parameters = this.transformList(tree.parameters);
  10380. if (parameters === tree.parameters) {
  10381. return tree;
  10382. }
  10383. return new TypeParameters(tree.location, parameters);
  10384. },
  10385. transformTypeReference: function(tree) {
  10386. var typeName = this.transformAny(tree.typeName);
  10387. var args = this.transformAny(tree.args);
  10388. if (typeName === tree.typeName && args === tree.args) {
  10389. return tree;
  10390. }
  10391. return new TypeReference(tree.location, typeName, args);
  10392. },
  10393. transformUnaryExpression: function(tree) {
  10394. var operand = this.transformAny(tree.operand);
  10395. if (operand === tree.operand) {
  10396. return tree;
  10397. }
  10398. return new UnaryExpression(tree.location, tree.operator, operand);
  10399. },
  10400. transformUnionType: function(tree) {
  10401. var types = this.transformList(tree.types);
  10402. if (types === tree.types) {
  10403. return tree;
  10404. }
  10405. return new UnionType(tree.location, types);
  10406. },
  10407. transformVariableDeclaration: function(tree) {
  10408. var lvalue = this.transformAny(tree.lvalue);
  10409. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  10410. var initializer = this.transformAny(tree.initializer);
  10411. if (lvalue === tree.lvalue && typeAnnotation === tree.typeAnnotation && initializer === tree.initializer) {
  10412. return tree;
  10413. }
  10414. return new VariableDeclaration(tree.location, lvalue, typeAnnotation, initializer);
  10415. },
  10416. transformVariableDeclarationList: function(tree) {
  10417. var declarations = this.transformList(tree.declarations);
  10418. if (declarations === tree.declarations) {
  10419. return tree;
  10420. }
  10421. return new VariableDeclarationList(tree.location, tree.declarationType, declarations);
  10422. },
  10423. transformVariableStatement: function(tree) {
  10424. var declarations = this.transformAny(tree.declarations);
  10425. if (declarations === tree.declarations) {
  10426. return tree;
  10427. }
  10428. return new VariableStatement(tree.location, declarations);
  10429. },
  10430. transformWhileStatement: function(tree) {
  10431. var condition = this.transformAny(tree.condition);
  10432. var body = this.transformToBlockOrStatement(tree.body);
  10433. if (condition === tree.condition && body === tree.body) {
  10434. return tree;
  10435. }
  10436. return new WhileStatement(tree.location, condition, body);
  10437. },
  10438. transformWithStatement: function(tree) {
  10439. var expression = this.transformAny(tree.expression);
  10440. var body = this.transformToBlockOrStatement(tree.body);
  10441. if (expression === tree.expression && body === tree.body) {
  10442. return tree;
  10443. }
  10444. return new WithStatement(tree.location, expression, body);
  10445. },
  10446. transformYieldExpression: function(tree) {
  10447. var expression = this.transformAny(tree.expression);
  10448. if (expression === tree.expression) {
  10449. return tree;
  10450. }
  10451. return new YieldExpression(tree.location, expression, tree.isYieldFor);
  10452. }
  10453. }, {});
  10454. }();
  10455. return {get ParseTreeTransformer() {
  10456. return ParseTreeTransformer;
  10457. }};
  10458. });
  10459. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js", [], function() {
  10460. "use strict";
  10461. var __moduleName = "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js";
  10462. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js")).ParseTreeTransformer;
  10463. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js")),
  10464. Module = $__2.Module,
  10465. Script = $__2.Script;
  10466. var AttachModuleNameTransformer = function($__super) {
  10467. function AttachModuleNameTransformer(moduleName) {
  10468. $traceurRuntime.superConstructor(AttachModuleNameTransformer).call(this);
  10469. this.moduleName_ = moduleName;
  10470. }
  10471. return ($traceurRuntime.createClass)(AttachModuleNameTransformer, {
  10472. transformModule: function(tree) {
  10473. return new Module(tree.location, tree.scriptItemList, this.moduleName_);
  10474. },
  10475. transformScript: function(tree) {
  10476. return new Script(tree.location, tree.scriptItemList, this.moduleName_);
  10477. }
  10478. }, {}, $__super);
  10479. }(ParseTreeTransformer);
  10480. return {get AttachModuleNameTransformer() {
  10481. return AttachModuleNameTransformer;
  10482. }};
  10483. });
  10484. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/IdentifierToken.js", [], function() {
  10485. "use strict";
  10486. var __moduleName = "traceur@0.0.112/src/syntax/IdentifierToken.js";
  10487. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/IdentifierToken.js")).Token;
  10488. var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/IdentifierToken.js")).IDENTIFIER;
  10489. var IdentifierToken = function($__super) {
  10490. function IdentifierToken(location, value) {
  10491. $traceurRuntime.superConstructor(IdentifierToken).call(this, IDENTIFIER, location);
  10492. this.value = value;
  10493. }
  10494. return ($traceurRuntime.createClass)(IdentifierToken, {toString: function() {
  10495. return this.value;
  10496. }}, {}, $__super);
  10497. }(Token);
  10498. return {get IdentifierToken() {
  10499. return IdentifierToken;
  10500. }};
  10501. });
  10502. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/LiteralToken.js", [], function() {
  10503. "use strict";
  10504. var __moduleName = "traceur@0.0.112/src/syntax/LiteralToken.js";
  10505. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/LiteralToken.js")).Token;
  10506. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/LiteralToken.js")),
  10507. NULL = $__11.NULL,
  10508. NUMBER = $__11.NUMBER,
  10509. STRING = $__11.STRING;
  10510. var StringParser = function() {
  10511. var $__2;
  10512. function StringParser(value) {
  10513. this.value = value;
  10514. this.index = 0;
  10515. }
  10516. return ($traceurRuntime.createClass)(StringParser, ($__2 = {}, Object.defineProperty($__2, Symbol.iterator, {
  10517. value: function() {
  10518. return this;
  10519. },
  10520. configurable: true,
  10521. enumerable: true,
  10522. writable: true
  10523. }), Object.defineProperty($__2, "next", {
  10524. value: function() {
  10525. if (++this.index >= this.value.length - 1)
  10526. return {
  10527. value: undefined,
  10528. done: true
  10529. };
  10530. return {
  10531. value: this.value[this.index],
  10532. done: false
  10533. };
  10534. },
  10535. configurable: true,
  10536. enumerable: true,
  10537. writable: true
  10538. }), Object.defineProperty($__2, "parse", {
  10539. value: function() {
  10540. if (this.value.indexOf('\\') === -1)
  10541. return this.value.slice(1, -1);
  10542. var result = '';
  10543. var $__6 = true;
  10544. var $__7 = false;
  10545. var $__8 = undefined;
  10546. try {
  10547. for (var $__4 = void 0,
  10548. $__3 = (this)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) {
  10549. var ch = $__4.value;
  10550. {
  10551. result += ch === '\\' ? this.parseEscapeSequence() : ch;
  10552. }
  10553. }
  10554. } catch ($__9) {
  10555. $__7 = true;
  10556. $__8 = $__9;
  10557. } finally {
  10558. try {
  10559. if (!$__6 && $__3.return != null) {
  10560. $__3.return();
  10561. }
  10562. } finally {
  10563. if ($__7) {
  10564. throw $__8;
  10565. }
  10566. }
  10567. }
  10568. return result;
  10569. },
  10570. configurable: true,
  10571. enumerable: true,
  10572. writable: true
  10573. }), Object.defineProperty($__2, "parseEscapeSequence", {
  10574. value: function() {
  10575. var ch = this.next().value;
  10576. switch (ch) {
  10577. case '\n':
  10578. case '\r':
  10579. case '\u2028':
  10580. case '\u2029':
  10581. return '';
  10582. case '0':
  10583. return '\0';
  10584. case 'b':
  10585. return '\b';
  10586. case 'f':
  10587. return '\f';
  10588. case 'n':
  10589. return '\n';
  10590. case 'r':
  10591. return '\r';
  10592. case 't':
  10593. return '\t';
  10594. case 'v':
  10595. return '\v';
  10596. case 'x':
  10597. return String.fromCharCode(parseInt(this.next().value + this.next().value, 16));
  10598. case 'u':
  10599. {
  10600. var nextValue = this.next().value;
  10601. if (nextValue === '{') {
  10602. var hexDigits = '';
  10603. while ((nextValue = this.next().value) !== '}') {
  10604. hexDigits += nextValue;
  10605. }
  10606. var codePoint = parseInt(hexDigits, 16);
  10607. if (codePoint <= 0xFFFF) {
  10608. return String.fromCharCode(codePoint);
  10609. }
  10610. var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;
  10611. var low = (codePoint - 0x10000) % 0x400 + 0xDC00;
  10612. return String.fromCharCode(high, low);
  10613. }
  10614. return String.fromCharCode(parseInt(nextValue + this.next().value + this.next().value + this.next().value, 16));
  10615. }
  10616. default:
  10617. if (Number(ch) < 8)
  10618. throw new Error('Octal literals are not supported');
  10619. return ch;
  10620. }
  10621. },
  10622. configurable: true,
  10623. enumerable: true,
  10624. writable: true
  10625. }), $__2), {});
  10626. }();
  10627. var LiteralToken = function($__super) {
  10628. function LiteralToken(type, value, location) {
  10629. $traceurRuntime.superConstructor(LiteralToken).call(this, type, location);
  10630. this.value = value;
  10631. }
  10632. return ($traceurRuntime.createClass)(LiteralToken, {
  10633. toString: function() {
  10634. return this.value;
  10635. },
  10636. get processedValue() {
  10637. switch (this.type) {
  10638. case NULL:
  10639. return null;
  10640. case NUMBER:
  10641. {
  10642. var value = this.value;
  10643. if (value.charCodeAt(0) === 48) {
  10644. switch (value.charCodeAt(1)) {
  10645. case 66:
  10646. case 98:
  10647. return parseInt(this.value.slice(2), 2);
  10648. case 79:
  10649. case 111:
  10650. return parseInt(this.value.slice(2), 8);
  10651. }
  10652. }
  10653. return Number(this.value);
  10654. }
  10655. case STRING:
  10656. {
  10657. var parser = new StringParser(this.value);
  10658. return parser.parse();
  10659. }
  10660. default:
  10661. throw new Error('Not implemented');
  10662. }
  10663. }
  10664. }, {}, $__super);
  10665. }(Token);
  10666. return {get LiteralToken() {
  10667. return LiteralToken;
  10668. }};
  10669. });
  10670. $traceurRuntime.registerModule("traceur@0.0.112/src/util/assert.js", [], function() {
  10671. "use strict";
  10672. var __moduleName = "traceur@0.0.112/src/util/assert.js";
  10673. function assert(b) {
  10674. if (!b && $traceurRuntime.options.debug)
  10675. throw Error('Assertion failed');
  10676. }
  10677. return {get assert() {
  10678. return assert;
  10679. }};
  10680. });
  10681. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParseTreeFactory.js", [], function() {
  10682. "use strict";
  10683. var __moduleName = "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js";
  10684. var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).IdentifierToken;
  10685. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).LiteralToken;
  10686. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTree.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")),
  10687. ParseTree = $__3.ParseTree,
  10688. ParseTreeType = $__3.ParseTreeType;
  10689. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")),
  10690. CALL = $__4.CALL,
  10691. CREATE = $__4.CREATE,
  10692. DEFINE_PROPERTY = $__4.DEFINE_PROPERTY,
  10693. FREEZE = $__4.FREEZE,
  10694. OBJECT = $__4.OBJECT,
  10695. UNDEFINED = $__4.UNDEFINED;
  10696. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).Token;
  10697. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")),
  10698. EQUAL = $__6.EQUAL,
  10699. FALSE = $__6.FALSE,
  10700. NULL = $__6.NULL,
  10701. NUMBER = $__6.NUMBER,
  10702. STRING = $__6.STRING,
  10703. TRUE = $__6.TRUE,
  10704. VOID = $__6.VOID;
  10705. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).assert;
  10706. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")),
  10707. ArgumentList = $__8.ArgumentList,
  10708. ArrayLiteral = $__8.ArrayLiteral,
  10709. BindingElement = $__8.BindingElement,
  10710. BinaryExpression = $__8.BinaryExpression,
  10711. BindingIdentifier = $__8.BindingIdentifier,
  10712. Block = $__8.Block,
  10713. BreakStatement = $__8.BreakStatement,
  10714. CallExpression = $__8.CallExpression,
  10715. CaseClause = $__8.CaseClause,
  10716. Catch = $__8.Catch,
  10717. ClassDeclaration = $__8.ClassDeclaration,
  10718. CommaExpression = $__8.CommaExpression,
  10719. ConditionalExpression = $__8.ConditionalExpression,
  10720. ContinueStatement = $__8.ContinueStatement,
  10721. DefaultClause = $__8.DefaultClause,
  10722. DoWhileStatement = $__8.DoWhileStatement,
  10723. EmptyStatement = $__8.EmptyStatement,
  10724. ExpressionStatement = $__8.ExpressionStatement,
  10725. Finally = $__8.Finally,
  10726. ForInStatement = $__8.ForInStatement,
  10727. ForOfStatement = $__8.ForOfStatement,
  10728. ForStatement = $__8.ForStatement,
  10729. FormalParameter = $__8.FormalParameter,
  10730. FormalParameterList = $__8.FormalParameterList,
  10731. FunctionBody = $__8.FunctionBody,
  10732. FunctionExpression = $__8.FunctionExpression,
  10733. IdentifierExpression = $__8.IdentifierExpression,
  10734. IfStatement = $__8.IfStatement,
  10735. ImportedBinding = $__8.ImportedBinding,
  10736. LiteralExpression = $__8.LiteralExpression,
  10737. LiteralPropertyName = $__8.LiteralPropertyName,
  10738. MemberExpression = $__8.MemberExpression,
  10739. MemberLookupExpression = $__8.MemberLookupExpression,
  10740. NewExpression = $__8.NewExpression,
  10741. ObjectLiteral = $__8.ObjectLiteral,
  10742. ParenExpression = $__8.ParenExpression,
  10743. PostfixExpression = $__8.PostfixExpression,
  10744. Script = $__8.Script,
  10745. PropertyNameAssignment = $__8.PropertyNameAssignment,
  10746. RestParameter = $__8.RestParameter,
  10747. ReturnStatement = $__8.ReturnStatement,
  10748. SpreadExpression = $__8.SpreadExpression,
  10749. SwitchStatement = $__8.SwitchStatement,
  10750. ThisExpression = $__8.ThisExpression,
  10751. ThrowStatement = $__8.ThrowStatement,
  10752. TryStatement = $__8.TryStatement,
  10753. UnaryExpression = $__8.UnaryExpression,
  10754. VariableDeclaration = $__8.VariableDeclaration,
  10755. VariableDeclarationList = $__8.VariableDeclarationList,
  10756. VariableStatement = $__8.VariableStatement,
  10757. WhileStatement = $__8.WhileStatement,
  10758. WithStatement = $__8.WithStatement;
  10759. var slice = Array.prototype.slice.call.bind(Array.prototype.slice);
  10760. var map = Array.prototype.map.call.bind(Array.prototype.map);
  10761. function createOperatorToken(operator) {
  10762. return new Token(operator, null);
  10763. }
  10764. function createIdentifierToken(identifier) {
  10765. return new IdentifierToken(null, identifier);
  10766. }
  10767. function createStringLiteralToken(value) {
  10768. return new LiteralToken(STRING, JSON.stringify(value), null);
  10769. }
  10770. function createBooleanLiteralToken(value) {
  10771. return new Token(value ? TRUE : FALSE, null);
  10772. }
  10773. function createNullLiteralToken() {
  10774. return new LiteralToken(NULL, 'null', null);
  10775. }
  10776. function createNumberLiteralToken(value) {
  10777. return new LiteralToken(NUMBER, String(value), null);
  10778. }
  10779. function createEmptyParameterList() {
  10780. return new FormalParameterList(null, []);
  10781. }
  10782. function createFormalParameter(name) {
  10783. var bindingIdentifier = createBindingIdentifier(name);
  10784. return new FormalParameter(null, new BindingElement(null, bindingIdentifier, null), null, []);
  10785. }
  10786. function createArgumentList(list) {
  10787. return new ArgumentList(null, list);
  10788. }
  10789. function createEmptyArgumentList() {
  10790. return createArgumentList([]);
  10791. }
  10792. function createArrayLiteral(list) {
  10793. return new ArrayLiteral(null, list);
  10794. }
  10795. function createEmptyArrayLiteral() {
  10796. return createArrayLiteral([]);
  10797. }
  10798. function createAssignmentExpression(lhs, rhs) {
  10799. return new BinaryExpression(null, lhs, createOperatorToken(EQUAL), rhs);
  10800. }
  10801. function createBinaryExpression(left, operator, right) {
  10802. return new BinaryExpression(null, left, operator, right);
  10803. }
  10804. function createBindingIdentifier(identifier) {
  10805. if (typeof identifier === 'string')
  10806. identifier = createIdentifierToken(identifier);
  10807. else if (identifier.type === ParseTreeType.BINDING_IDENTIFIER)
  10808. return identifier;
  10809. else if (identifier.type === ParseTreeType.IDENTIFIER_EXPRESSION)
  10810. return new BindingIdentifier(identifier.location, identifier.identifierToken);
  10811. return new BindingIdentifier(null, identifier);
  10812. }
  10813. function createImportedBinding(name) {
  10814. var bindingIdentifier = createBindingIdentifier(name);
  10815. return new ImportedBinding(bindingIdentifier.location, bindingIdentifier);
  10816. }
  10817. function createEmptyStatement() {
  10818. return new EmptyStatement(null);
  10819. }
  10820. function createEmptyBlock() {
  10821. return createBlock([]);
  10822. }
  10823. function createBlock(statements) {
  10824. return new Block(null, statements);
  10825. }
  10826. function createFunctionBody(statements) {
  10827. return new FunctionBody(null, statements);
  10828. }
  10829. function createScopedExpression(body, scope) {
  10830. assert(body.type === 'FUNCTION_BODY');
  10831. return createCallCall(createParenExpression(createFunctionExpression(createEmptyParameterList(), body)), scope);
  10832. }
  10833. function createImmediatelyInvokedFunctionExpression(body) {
  10834. assert(body.type === 'FUNCTION_BODY');
  10835. return createCallExpression(createParenExpression(createFunctionExpression(createEmptyParameterList(), body)));
  10836. }
  10837. function createCallExpression(operand) {
  10838. var args = arguments[1] !== (void 0) ? arguments[1] : createEmptyArgumentList();
  10839. return new CallExpression(null, operand, args);
  10840. }
  10841. function createBreakStatement() {
  10842. var name = arguments[0] !== (void 0) ? arguments[0] : null;
  10843. return new BreakStatement(null, name);
  10844. }
  10845. function createCallCall(func, thisExpression) {
  10846. return createCallExpression(createMemberExpression(func, CALL), createArgumentList([thisExpression]));
  10847. }
  10848. function createCaseClause(expression, statements) {
  10849. return new CaseClause(null, expression, statements);
  10850. }
  10851. function createCatch(identifier, catchBody) {
  10852. identifier = createBindingIdentifier(identifier);
  10853. return new Catch(null, identifier, catchBody);
  10854. }
  10855. function createClassDeclaration(name, superClass, elements) {
  10856. return new ClassDeclaration(null, name, superClass, elements, []);
  10857. }
  10858. function createCommaExpression(expressions) {
  10859. return new CommaExpression(null, expressions);
  10860. }
  10861. function createConditionalExpression(condition, left, right) {
  10862. return new ConditionalExpression(null, condition, left, right);
  10863. }
  10864. function createContinueStatement() {
  10865. var name = arguments[0] !== (void 0) ? arguments[0] : null;
  10866. return new ContinueStatement(null, name);
  10867. }
  10868. function createDefaultClause(statements) {
  10869. return new DefaultClause(null, statements);
  10870. }
  10871. function createDoWhileStatement(body, condition) {
  10872. return new DoWhileStatement(null, body, condition);
  10873. }
  10874. function createAssignmentStatement(lhs, rhs) {
  10875. return createExpressionStatement(createAssignmentExpression(lhs, rhs));
  10876. }
  10877. function createCallStatement(operand) {
  10878. var args = arguments[1];
  10879. return createExpressionStatement(createCallExpression(operand, args));
  10880. }
  10881. function createExpressionStatement(expression) {
  10882. return new ExpressionStatement(null, expression);
  10883. }
  10884. function createFinally(block) {
  10885. return new Finally(null, block);
  10886. }
  10887. function createForOfStatement(initializer, collection, body) {
  10888. return new ForOfStatement(null, initializer, collection, body);
  10889. }
  10890. function createForInStatement(initializer, collection, body) {
  10891. return new ForInStatement(null, initializer, collection, body);
  10892. }
  10893. function createForStatement(variables, condition, increment, body) {
  10894. return new ForStatement(null, variables, condition, increment, body);
  10895. }
  10896. function createFunctionExpression(parameterList, body) {
  10897. assert(body.type === 'FUNCTION_BODY');
  10898. return new FunctionExpression(null, null, false, parameterList, null, [], body);
  10899. }
  10900. function createIdentifierExpression(identifier) {
  10901. if (typeof identifier === 'string')
  10902. identifier = createIdentifierToken(identifier);
  10903. else if (identifier instanceof BindingIdentifier)
  10904. identifier = identifier.identifierToken;
  10905. return new IdentifierExpression(null, identifier);
  10906. }
  10907. function createUndefinedExpression() {
  10908. return createIdentifierExpression(UNDEFINED);
  10909. }
  10910. function createIfStatement(condition, ifClause) {
  10911. var elseClause = arguments[2] !== (void 0) ? arguments[2] : null;
  10912. return new IfStatement(null, condition, ifClause, elseClause);
  10913. }
  10914. function createStringLiteral(value) {
  10915. return new LiteralExpression(null, createStringLiteralToken(value));
  10916. }
  10917. function createBooleanLiteral(value) {
  10918. return new LiteralExpression(null, createBooleanLiteralToken(value));
  10919. }
  10920. function createTrueLiteral() {
  10921. return createBooleanLiteral(true);
  10922. }
  10923. function createFalseLiteral() {
  10924. return createBooleanLiteral(false);
  10925. }
  10926. function createNullLiteral() {
  10927. return new LiteralExpression(null, createNullLiteralToken());
  10928. }
  10929. function createNumberLiteral(value) {
  10930. return new LiteralExpression(null, createNumberLiteralToken(value));
  10931. }
  10932. function createMemberExpression(operand, memberName) {
  10933. for (var memberNames = [],
  10934. $__0 = 2; $__0 < arguments.length; $__0++)
  10935. memberNames[$__0 - 2] = arguments[$__0];
  10936. if (typeof operand === 'string' || operand instanceof IdentifierToken)
  10937. operand = createIdentifierExpression(operand);
  10938. if (typeof memberName === 'string')
  10939. memberName = createIdentifierToken(memberName);
  10940. if (memberName instanceof LiteralToken)
  10941. memberName = new LiteralExpression(null, memberName);
  10942. var tree = memberName instanceof LiteralExpression ? new MemberLookupExpression(null, operand, memberName) : new MemberExpression(null, operand, memberName);
  10943. for (var i = 0; i < memberNames.length; i++) {
  10944. tree = createMemberExpression(tree, memberNames[i]);
  10945. }
  10946. return tree;
  10947. }
  10948. function createMemberLookupExpression(operand, memberExpression) {
  10949. return new MemberLookupExpression(null, operand, memberExpression);
  10950. }
  10951. function createThisExpression() {
  10952. return new ThisExpression(null);
  10953. }
  10954. function createNewExpression(operand, args) {
  10955. return new NewExpression(null, operand, args);
  10956. }
  10957. function createObjectFreeze(value) {
  10958. return createCallExpression(createMemberExpression(OBJECT, FREEZE), createArgumentList([value]));
  10959. }
  10960. function createObjectCreate(protoExpression) {
  10961. var descriptors = arguments[1];
  10962. var argumentList = [protoExpression];
  10963. if (descriptors)
  10964. argumentList.push(descriptors);
  10965. return createCallExpression(createMemberExpression(OBJECT, CREATE), createArgumentList(argumentList));
  10966. }
  10967. function createObjectLiteralForDescriptor(descr) {
  10968. var propertyNameAndValues = Object.keys(descr).map(function(name) {
  10969. var value = descr[name];
  10970. if (!(value instanceof ParseTree))
  10971. value = createBooleanLiteral(!!value);
  10972. return createPropertyNameAssignment(name, value);
  10973. });
  10974. return createObjectLiteral(propertyNameAndValues);
  10975. }
  10976. function createDefineProperty(tree, name, descr) {
  10977. if (typeof name === 'string')
  10978. name = createStringLiteral(name);
  10979. return createCallExpression(createMemberExpression(OBJECT, DEFINE_PROPERTY), createArgumentList([tree, name, createObjectLiteralForDescriptor(descr)]));
  10980. }
  10981. function createObjectLiteral(propertyNameAndValues) {
  10982. return new ObjectLiteral(null, propertyNameAndValues);
  10983. }
  10984. function createParenExpression(expression) {
  10985. return new ParenExpression(null, expression);
  10986. }
  10987. function createPostfixExpression(operand, operator) {
  10988. return new PostfixExpression(null, operand, operator);
  10989. }
  10990. function createScript(scriptItemList) {
  10991. return new Script(null, scriptItemList, null);
  10992. }
  10993. function createPropertyNameAssignment(identifier, value) {
  10994. if (typeof identifier === 'string')
  10995. identifier = createLiteralPropertyName(identifier);
  10996. return new PropertyNameAssignment(null, identifier, value);
  10997. }
  10998. function createLiteralPropertyName(name) {
  10999. return new LiteralPropertyName(null, createIdentifierToken(name));
  11000. }
  11001. function createRestParameter(identifier) {
  11002. var rest = new RestParameter(null, createBindingIdentifier(identifier));
  11003. return new FormalParameter(null, rest, null, []);
  11004. }
  11005. function createReturnStatement(expression) {
  11006. return new ReturnStatement(null, expression);
  11007. }
  11008. function createSpreadExpression(expression) {
  11009. return new SpreadExpression(null, expression);
  11010. }
  11011. function createSwitchStatement(expression, caseClauses) {
  11012. return new SwitchStatement(null, expression, caseClauses);
  11013. }
  11014. function createThrowStatement(value) {
  11015. return new ThrowStatement(null, value);
  11016. }
  11017. function createTryStatement(body, catchBlock) {
  11018. var finallyBlock = arguments[2] !== (void 0) ? arguments[2] : null;
  11019. return new TryStatement(null, body, catchBlock, finallyBlock);
  11020. }
  11021. function createUnaryExpression(operator, operand) {
  11022. return new UnaryExpression(null, operator, operand);
  11023. }
  11024. function createUseStrictDirective() {
  11025. return createExpressionStatement(createStringLiteral('use strict'));
  11026. }
  11027. function createVariableDeclarationList(binding, identifierOrDeclarations) {
  11028. var initializer = arguments[2];
  11029. if (identifierOrDeclarations instanceof Array) {
  11030. var declarations = identifierOrDeclarations;
  11031. return new VariableDeclarationList(null, binding, declarations);
  11032. }
  11033. var identifier = identifierOrDeclarations;
  11034. return createVariableDeclarationList(binding, [createVariableDeclaration(identifier, initializer)]);
  11035. }
  11036. function createVariableDeclaration(identifier, initializer) {
  11037. if (!(identifier instanceof ParseTree) || identifier.type !== ParseTreeType.BINDING_IDENTIFIER && identifier.type !== ParseTreeType.OBJECT_PATTERN && identifier.type !== ParseTreeType.ARRAY_PATTERN) {
  11038. identifier = createBindingIdentifier(identifier);
  11039. }
  11040. return new VariableDeclaration(null, identifier, null, initializer);
  11041. }
  11042. function createVariableStatement(listOrBinding) {
  11043. var identifier = arguments[1];
  11044. var initializer = arguments[2];
  11045. if (listOrBinding instanceof VariableDeclarationList)
  11046. return new VariableStatement(null, listOrBinding);
  11047. var binding = listOrBinding;
  11048. var list = createVariableDeclarationList(binding, identifier, initializer);
  11049. return createVariableStatement(list);
  11050. }
  11051. function createVoid0() {
  11052. return createParenExpression(createUnaryExpression(createOperatorToken(VOID), createNumberLiteral(0)));
  11053. }
  11054. function createWhileStatement(condition, body) {
  11055. return new WhileStatement(null, condition, body);
  11056. }
  11057. function createWithStatement(expression, body) {
  11058. return new WithStatement(null, expression, body);
  11059. }
  11060. function createAssignStateStatement(state) {
  11061. return createAssignmentStatement(createMemberExpression('$ctx', 'state'), createNumberLiteral(state));
  11062. }
  11063. return {
  11064. get createOperatorToken() {
  11065. return createOperatorToken;
  11066. },
  11067. get createIdentifierToken() {
  11068. return createIdentifierToken;
  11069. },
  11070. get createStringLiteralToken() {
  11071. return createStringLiteralToken;
  11072. },
  11073. get createBooleanLiteralToken() {
  11074. return createBooleanLiteralToken;
  11075. },
  11076. get createNullLiteralToken() {
  11077. return createNullLiteralToken;
  11078. },
  11079. get createNumberLiteralToken() {
  11080. return createNumberLiteralToken;
  11081. },
  11082. get createEmptyParameterList() {
  11083. return createEmptyParameterList;
  11084. },
  11085. get createFormalParameter() {
  11086. return createFormalParameter;
  11087. },
  11088. get createArgumentList() {
  11089. return createArgumentList;
  11090. },
  11091. get createEmptyArgumentList() {
  11092. return createEmptyArgumentList;
  11093. },
  11094. get createArrayLiteral() {
  11095. return createArrayLiteral;
  11096. },
  11097. get createEmptyArrayLiteral() {
  11098. return createEmptyArrayLiteral;
  11099. },
  11100. get createAssignmentExpression() {
  11101. return createAssignmentExpression;
  11102. },
  11103. get createBinaryExpression() {
  11104. return createBinaryExpression;
  11105. },
  11106. get createBindingIdentifier() {
  11107. return createBindingIdentifier;
  11108. },
  11109. get createImportedBinding() {
  11110. return createImportedBinding;
  11111. },
  11112. get createEmptyStatement() {
  11113. return createEmptyStatement;
  11114. },
  11115. get createEmptyBlock() {
  11116. return createEmptyBlock;
  11117. },
  11118. get createBlock() {
  11119. return createBlock;
  11120. },
  11121. get createFunctionBody() {
  11122. return createFunctionBody;
  11123. },
  11124. get createScopedExpression() {
  11125. return createScopedExpression;
  11126. },
  11127. get createImmediatelyInvokedFunctionExpression() {
  11128. return createImmediatelyInvokedFunctionExpression;
  11129. },
  11130. get createCallExpression() {
  11131. return createCallExpression;
  11132. },
  11133. get createBreakStatement() {
  11134. return createBreakStatement;
  11135. },
  11136. get createCaseClause() {
  11137. return createCaseClause;
  11138. },
  11139. get createCatch() {
  11140. return createCatch;
  11141. },
  11142. get createClassDeclaration() {
  11143. return createClassDeclaration;
  11144. },
  11145. get createCommaExpression() {
  11146. return createCommaExpression;
  11147. },
  11148. get createConditionalExpression() {
  11149. return createConditionalExpression;
  11150. },
  11151. get createContinueStatement() {
  11152. return createContinueStatement;
  11153. },
  11154. get createDefaultClause() {
  11155. return createDefaultClause;
  11156. },
  11157. get createDoWhileStatement() {
  11158. return createDoWhileStatement;
  11159. },
  11160. get createAssignmentStatement() {
  11161. return createAssignmentStatement;
  11162. },
  11163. get createCallStatement() {
  11164. return createCallStatement;
  11165. },
  11166. get createExpressionStatement() {
  11167. return createExpressionStatement;
  11168. },
  11169. get createFinally() {
  11170. return createFinally;
  11171. },
  11172. get createForOfStatement() {
  11173. return createForOfStatement;
  11174. },
  11175. get createForInStatement() {
  11176. return createForInStatement;
  11177. },
  11178. get createForStatement() {
  11179. return createForStatement;
  11180. },
  11181. get createFunctionExpression() {
  11182. return createFunctionExpression;
  11183. },
  11184. get createIdentifierExpression() {
  11185. return createIdentifierExpression;
  11186. },
  11187. get createUndefinedExpression() {
  11188. return createUndefinedExpression;
  11189. },
  11190. get createIfStatement() {
  11191. return createIfStatement;
  11192. },
  11193. get createStringLiteral() {
  11194. return createStringLiteral;
  11195. },
  11196. get createBooleanLiteral() {
  11197. return createBooleanLiteral;
  11198. },
  11199. get createTrueLiteral() {
  11200. return createTrueLiteral;
  11201. },
  11202. get createFalseLiteral() {
  11203. return createFalseLiteral;
  11204. },
  11205. get createNullLiteral() {
  11206. return createNullLiteral;
  11207. },
  11208. get createNumberLiteral() {
  11209. return createNumberLiteral;
  11210. },
  11211. get createMemberExpression() {
  11212. return createMemberExpression;
  11213. },
  11214. get createMemberLookupExpression() {
  11215. return createMemberLookupExpression;
  11216. },
  11217. get createThisExpression() {
  11218. return createThisExpression;
  11219. },
  11220. get createNewExpression() {
  11221. return createNewExpression;
  11222. },
  11223. get createObjectFreeze() {
  11224. return createObjectFreeze;
  11225. },
  11226. get createObjectCreate() {
  11227. return createObjectCreate;
  11228. },
  11229. get createObjectLiteralForDescriptor() {
  11230. return createObjectLiteralForDescriptor;
  11231. },
  11232. get createDefineProperty() {
  11233. return createDefineProperty;
  11234. },
  11235. get createObjectLiteral() {
  11236. return createObjectLiteral;
  11237. },
  11238. get createParenExpression() {
  11239. return createParenExpression;
  11240. },
  11241. get createPostfixExpression() {
  11242. return createPostfixExpression;
  11243. },
  11244. get createScript() {
  11245. return createScript;
  11246. },
  11247. get createPropertyNameAssignment() {
  11248. return createPropertyNameAssignment;
  11249. },
  11250. get createLiteralPropertyName() {
  11251. return createLiteralPropertyName;
  11252. },
  11253. get createRestParameter() {
  11254. return createRestParameter;
  11255. },
  11256. get createReturnStatement() {
  11257. return createReturnStatement;
  11258. },
  11259. get createSwitchStatement() {
  11260. return createSwitchStatement;
  11261. },
  11262. get createThrowStatement() {
  11263. return createThrowStatement;
  11264. },
  11265. get createTryStatement() {
  11266. return createTryStatement;
  11267. },
  11268. get createUnaryExpression() {
  11269. return createUnaryExpression;
  11270. },
  11271. get createUseStrictDirective() {
  11272. return createUseStrictDirective;
  11273. },
  11274. get createVariableDeclarationList() {
  11275. return createVariableDeclarationList;
  11276. },
  11277. get createVariableDeclaration() {
  11278. return createVariableDeclaration;
  11279. },
  11280. get createVariableStatement() {
  11281. return createVariableStatement;
  11282. },
  11283. get createVoid0() {
  11284. return createVoid0;
  11285. },
  11286. get createWhileStatement() {
  11287. return createWhileStatement;
  11288. },
  11289. get createWithStatement() {
  11290. return createWithStatement;
  11291. },
  11292. get createAssignStateStatement() {
  11293. return createAssignStateStatement;
  11294. }
  11295. };
  11296. });
  11297. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/ParseTreeVisitor.js", [], function() {
  11298. "use strict";
  11299. var __moduleName = "traceur@0.0.112/src/syntax/ParseTreeVisitor.js";
  11300. var ParseTreeVisitor = function() {
  11301. function ParseTreeVisitor() {}
  11302. return ($traceurRuntime.createClass)(ParseTreeVisitor, {
  11303. visitAny: function(tree) {
  11304. tree !== null && tree.visit(this);
  11305. },
  11306. visit: function(tree) {
  11307. this.visitAny(tree);
  11308. },
  11309. visitList: function(list) {
  11310. if (list) {
  11311. for (var i = 0; i < list.length; i++) {
  11312. this.visitAny(list[i]);
  11313. }
  11314. }
  11315. },
  11316. visitStateMachine: function(tree) {
  11317. throw Error('State machines should not live outside of the GeneratorTransformer.');
  11318. },
  11319. visitAnnotation: function(tree) {
  11320. this.visitAny(tree.name);
  11321. this.visitAny(tree.args);
  11322. },
  11323. visitAnonBlock: function(tree) {
  11324. this.visitList(tree.statements);
  11325. },
  11326. visitArgumentList: function(tree) {
  11327. this.visitList(tree.args);
  11328. },
  11329. visitArrayComprehension: function(tree) {
  11330. this.visitList(tree.comprehensionList);
  11331. this.visitAny(tree.expression);
  11332. },
  11333. visitArrayLiteral: function(tree) {
  11334. this.visitList(tree.elements);
  11335. },
  11336. visitArrayPattern: function(tree) {
  11337. this.visitList(tree.elements);
  11338. },
  11339. visitArrayType: function(tree) {
  11340. this.visitAny(tree.elementType);
  11341. },
  11342. visitArrowFunction: function(tree) {
  11343. this.visitAny(tree.parameterList);
  11344. this.visitAny(tree.body);
  11345. },
  11346. visitAssignmentElement: function(tree) {
  11347. this.visitAny(tree.assignment);
  11348. this.visitAny(tree.initializer);
  11349. },
  11350. visitAwaitExpression: function(tree) {
  11351. this.visitAny(tree.expression);
  11352. },
  11353. visitBinaryExpression: function(tree) {
  11354. this.visitAny(tree.left);
  11355. this.visitAny(tree.right);
  11356. },
  11357. visitBindingElement: function(tree) {
  11358. this.visitAny(tree.binding);
  11359. this.visitAny(tree.initializer);
  11360. },
  11361. visitBindingIdentifier: function(tree) {},
  11362. visitBlock: function(tree) {
  11363. this.visitList(tree.statements);
  11364. },
  11365. visitBreakStatement: function(tree) {},
  11366. visitCallExpression: function(tree) {
  11367. this.visitAny(tree.operand);
  11368. this.visitAny(tree.args);
  11369. },
  11370. visitCallSignature: function(tree) {
  11371. this.visitAny(tree.typeParameters);
  11372. this.visitAny(tree.parameterList);
  11373. this.visitAny(tree.returnType);
  11374. },
  11375. visitCaseClause: function(tree) {
  11376. this.visitAny(tree.expression);
  11377. this.visitList(tree.statements);
  11378. },
  11379. visitCatch: function(tree) {
  11380. this.visitAny(tree.binding);
  11381. this.visitAny(tree.catchBody);
  11382. },
  11383. visitClassDeclaration: function(tree) {
  11384. this.visitAny(tree.name);
  11385. this.visitAny(tree.superClass);
  11386. this.visitList(tree.elements);
  11387. this.visitList(tree.annotations);
  11388. this.visitAny(tree.typeParameters);
  11389. },
  11390. visitClassExpression: function(tree) {
  11391. this.visitAny(tree.name);
  11392. this.visitAny(tree.superClass);
  11393. this.visitList(tree.elements);
  11394. this.visitList(tree.annotations);
  11395. this.visitAny(tree.typeParameters);
  11396. },
  11397. visitCommaExpression: function(tree) {
  11398. this.visitList(tree.expressions);
  11399. },
  11400. visitComprehensionFor: function(tree) {
  11401. this.visitAny(tree.left);
  11402. this.visitAny(tree.iterator);
  11403. },
  11404. visitComprehensionIf: function(tree) {
  11405. this.visitAny(tree.expression);
  11406. },
  11407. visitComputedPropertyName: function(tree) {
  11408. this.visitAny(tree.expression);
  11409. },
  11410. visitConditionalExpression: function(tree) {
  11411. this.visitAny(tree.condition);
  11412. this.visitAny(tree.left);
  11413. this.visitAny(tree.right);
  11414. },
  11415. visitConstructSignature: function(tree) {
  11416. this.visitAny(tree.typeParameters);
  11417. this.visitAny(tree.parameterList);
  11418. this.visitAny(tree.returnType);
  11419. },
  11420. visitConstructorType: function(tree) {
  11421. this.visitAny(tree.typeParameters);
  11422. this.visitAny(tree.parameterList);
  11423. this.visitAny(tree.returnType);
  11424. },
  11425. visitContinueStatement: function(tree) {},
  11426. visitCoverFormals: function(tree) {
  11427. this.visitList(tree.expressions);
  11428. },
  11429. visitCoverInitializedName: function(tree) {
  11430. this.visitAny(tree.initializer);
  11431. },
  11432. visitDebuggerStatement: function(tree) {},
  11433. visitDefaultClause: function(tree) {
  11434. this.visitList(tree.statements);
  11435. },
  11436. visitDoWhileStatement: function(tree) {
  11437. this.visitAny(tree.body);
  11438. this.visitAny(tree.condition);
  11439. },
  11440. visitEmptyStatement: function(tree) {},
  11441. visitExportDeclaration: function(tree) {
  11442. this.visitAny(tree.declaration);
  11443. this.visitList(tree.annotations);
  11444. },
  11445. visitExportDefault: function(tree) {
  11446. this.visitAny(tree.expression);
  11447. },
  11448. visitExportSpecifier: function(tree) {},
  11449. visitExportSpecifierSet: function(tree) {
  11450. this.visitList(tree.specifiers);
  11451. },
  11452. visitExportStar: function(tree) {},
  11453. visitExpressionStatement: function(tree) {
  11454. this.visitAny(tree.expression);
  11455. },
  11456. visitFinally: function(tree) {
  11457. this.visitAny(tree.block);
  11458. },
  11459. visitForInStatement: function(tree) {
  11460. this.visitAny(tree.initializer);
  11461. this.visitAny(tree.collection);
  11462. this.visitAny(tree.body);
  11463. },
  11464. visitForOfStatement: function(tree) {
  11465. this.visitAny(tree.initializer);
  11466. this.visitAny(tree.collection);
  11467. this.visitAny(tree.body);
  11468. },
  11469. visitForOnStatement: function(tree) {
  11470. this.visitAny(tree.initializer);
  11471. this.visitAny(tree.observable);
  11472. this.visitAny(tree.body);
  11473. },
  11474. visitForStatement: function(tree) {
  11475. this.visitAny(tree.initializer);
  11476. this.visitAny(tree.condition);
  11477. this.visitAny(tree.increment);
  11478. this.visitAny(tree.body);
  11479. },
  11480. visitFormalParameter: function(tree) {
  11481. this.visitAny(tree.parameter);
  11482. this.visitAny(tree.typeAnnotation);
  11483. this.visitList(tree.annotations);
  11484. },
  11485. visitFormalParameterList: function(tree) {
  11486. this.visitList(tree.parameters);
  11487. },
  11488. visitForwardDefaultExport: function(tree) {},
  11489. visitFunctionBody: function(tree) {
  11490. this.visitList(tree.statements);
  11491. },
  11492. visitFunctionDeclaration: function(tree) {
  11493. this.visitAny(tree.name);
  11494. this.visitAny(tree.parameterList);
  11495. this.visitAny(tree.typeAnnotation);
  11496. this.visitList(tree.annotations);
  11497. this.visitAny(tree.body);
  11498. },
  11499. visitFunctionExpression: function(tree) {
  11500. this.visitAny(tree.name);
  11501. this.visitAny(tree.parameterList);
  11502. this.visitAny(tree.typeAnnotation);
  11503. this.visitList(tree.annotations);
  11504. this.visitAny(tree.body);
  11505. },
  11506. visitFunctionType: function(tree) {
  11507. this.visitAny(tree.typeParameters);
  11508. this.visitAny(tree.parameterList);
  11509. this.visitAny(tree.returnType);
  11510. },
  11511. visitGeneratorComprehension: function(tree) {
  11512. this.visitList(tree.comprehensionList);
  11513. this.visitAny(tree.expression);
  11514. },
  11515. visitGetAccessor: function(tree) {
  11516. this.visitAny(tree.name);
  11517. this.visitAny(tree.typeAnnotation);
  11518. this.visitList(tree.annotations);
  11519. this.visitAny(tree.body);
  11520. },
  11521. visitIdentifierExpression: function(tree) {},
  11522. visitIfStatement: function(tree) {
  11523. this.visitAny(tree.condition);
  11524. this.visitAny(tree.ifClause);
  11525. this.visitAny(tree.elseClause);
  11526. },
  11527. visitImportedBinding: function(tree) {
  11528. this.visitAny(tree.binding);
  11529. },
  11530. visitImportClausePair: function(tree) {
  11531. this.visitAny(tree.first);
  11532. this.visitAny(tree.second);
  11533. },
  11534. visitImportDeclaration: function(tree) {
  11535. this.visitAny(tree.importClause);
  11536. this.visitAny(tree.moduleSpecifier);
  11537. },
  11538. visitImportSpecifier: function(tree) {
  11539. this.visitAny(tree.binding);
  11540. },
  11541. visitImportSpecifierSet: function(tree) {
  11542. this.visitList(tree.specifiers);
  11543. },
  11544. visitImportTypeClause: function(tree) {
  11545. this.visitAny(tree.clause);
  11546. },
  11547. visitIndexSignature: function(tree) {
  11548. this.visitAny(tree.indexType);
  11549. this.visitAny(tree.typeAnnotation);
  11550. },
  11551. visitInterfaceDeclaration: function(tree) {
  11552. this.visitAny(tree.typeParameters);
  11553. this.visitAny(tree.objectType);
  11554. },
  11555. visitJsxAttribute: function(tree) {
  11556. this.visitAny(tree.value);
  11557. },
  11558. visitJsxElement: function(tree) {
  11559. this.visitAny(tree.name);
  11560. this.visitList(tree.attributes);
  11561. this.visitList(tree.children);
  11562. },
  11563. visitJsxElementName: function(tree) {},
  11564. visitJsxPlaceholder: function(tree) {
  11565. this.visitAny(tree.expression);
  11566. },
  11567. visitJsxSpreadAttribute: function(tree) {
  11568. this.visitAny(tree.expression);
  11569. },
  11570. visitJsxText: function(tree) {},
  11571. visitLabelledStatement: function(tree) {
  11572. this.visitAny(tree.statement);
  11573. },
  11574. visitLiteralExpression: function(tree) {},
  11575. visitLiteralPropertyName: function(tree) {},
  11576. visitMemberExpression: function(tree) {
  11577. this.visitAny(tree.operand);
  11578. },
  11579. visitMemberLookupExpression: function(tree) {
  11580. this.visitAny(tree.operand);
  11581. this.visitAny(tree.memberExpression);
  11582. },
  11583. visitMethod: function(tree) {
  11584. this.visitAny(tree.name);
  11585. this.visitAny(tree.parameterList);
  11586. this.visitAny(tree.typeAnnotation);
  11587. this.visitList(tree.annotations);
  11588. this.visitAny(tree.body);
  11589. this.visitAny(tree.debugName);
  11590. },
  11591. visitMethodSignature: function(tree) {
  11592. this.visitAny(tree.name);
  11593. this.visitAny(tree.callSignature);
  11594. },
  11595. visitModule: function(tree) {
  11596. this.visitList(tree.scriptItemList);
  11597. },
  11598. visitModuleSpecifier: function(tree) {},
  11599. visitNameSpaceExport: function(tree) {},
  11600. visitNameSpaceImport: function(tree) {
  11601. this.visitAny(tree.binding);
  11602. },
  11603. visitNamedExport: function(tree) {
  11604. this.visitAny(tree.exportClause);
  11605. this.visitAny(tree.moduleSpecifier);
  11606. },
  11607. visitNewExpression: function(tree) {
  11608. this.visitAny(tree.operand);
  11609. this.visitAny(tree.args);
  11610. },
  11611. visitObjectLiteral: function(tree) {
  11612. this.visitList(tree.propertyNameAndValues);
  11613. },
  11614. visitObjectPattern: function(tree) {
  11615. this.visitList(tree.fields);
  11616. },
  11617. visitObjectPatternField: function(tree) {
  11618. this.visitAny(tree.name);
  11619. this.visitAny(tree.element);
  11620. },
  11621. visitObjectType: function(tree) {
  11622. this.visitList(tree.typeMembers);
  11623. },
  11624. visitParenExpression: function(tree) {
  11625. this.visitAny(tree.expression);
  11626. },
  11627. visitPostfixExpression: function(tree) {
  11628. this.visitAny(tree.operand);
  11629. },
  11630. visitPredefinedType: function(tree) {},
  11631. visitScript: function(tree) {
  11632. this.visitList(tree.scriptItemList);
  11633. },
  11634. visitPropertyNameAssignment: function(tree) {
  11635. this.visitAny(tree.name);
  11636. this.visitAny(tree.value);
  11637. },
  11638. visitPropertyNameShorthand: function(tree) {},
  11639. visitPropertyVariableDeclaration: function(tree) {
  11640. this.visitAny(tree.name);
  11641. this.visitAny(tree.typeAnnotation);
  11642. this.visitList(tree.annotations);
  11643. this.visitAny(tree.initializer);
  11644. },
  11645. visitPropertySignature: function(tree) {
  11646. this.visitAny(tree.name);
  11647. this.visitAny(tree.typeAnnotation);
  11648. },
  11649. visitRestParameter: function(tree) {
  11650. this.visitAny(tree.identifier);
  11651. },
  11652. visitReturnStatement: function(tree) {
  11653. this.visitAny(tree.expression);
  11654. },
  11655. visitSetAccessor: function(tree) {
  11656. this.visitAny(tree.name);
  11657. this.visitAny(tree.parameterList);
  11658. this.visitList(tree.annotations);
  11659. this.visitAny(tree.body);
  11660. },
  11661. visitSpreadExpression: function(tree) {
  11662. this.visitAny(tree.expression);
  11663. },
  11664. visitSpreadPatternElement: function(tree) {
  11665. this.visitAny(tree.lvalue);
  11666. },
  11667. visitSuperExpression: function(tree) {},
  11668. visitSwitchStatement: function(tree) {
  11669. this.visitAny(tree.expression);
  11670. this.visitList(tree.caseClauses);
  11671. },
  11672. visitSyntaxErrorTree: function(tree) {},
  11673. visitTemplateLiteralExpression: function(tree) {
  11674. this.visitAny(tree.operand);
  11675. this.visitList(tree.elements);
  11676. },
  11677. visitTemplateLiteralPortion: function(tree) {},
  11678. visitTemplateSubstitution: function(tree) {
  11679. this.visitAny(tree.expression);
  11680. },
  11681. visitThisExpression: function(tree) {},
  11682. visitThrowStatement: function(tree) {
  11683. this.visitAny(tree.value);
  11684. },
  11685. visitTryStatement: function(tree) {
  11686. this.visitAny(tree.body);
  11687. this.visitAny(tree.catchBlock);
  11688. this.visitAny(tree.finallyBlock);
  11689. },
  11690. visitTypeAliasDeclaration: function(tree) {
  11691. this.visitAny(tree.value);
  11692. },
  11693. visitTypeArguments: function(tree) {
  11694. this.visitList(tree.args);
  11695. },
  11696. visitTypeName: function(tree) {
  11697. this.visitAny(tree.moduleName);
  11698. },
  11699. visitTypeParameter: function(tree) {
  11700. this.visitAny(tree.extendsType);
  11701. },
  11702. visitTypeParameters: function(tree) {
  11703. this.visitList(tree.parameters);
  11704. },
  11705. visitTypeReference: function(tree) {
  11706. this.visitAny(tree.typeName);
  11707. this.visitAny(tree.args);
  11708. },
  11709. visitUnaryExpression: function(tree) {
  11710. this.visitAny(tree.operand);
  11711. },
  11712. visitUnionType: function(tree) {
  11713. this.visitList(tree.types);
  11714. },
  11715. visitVariableDeclaration: function(tree) {
  11716. this.visitAny(tree.lvalue);
  11717. this.visitAny(tree.typeAnnotation);
  11718. this.visitAny(tree.initializer);
  11719. },
  11720. visitVariableDeclarationList: function(tree) {
  11721. this.visitList(tree.declarations);
  11722. },
  11723. visitVariableStatement: function(tree) {
  11724. this.visitAny(tree.declarations);
  11725. },
  11726. visitWhileStatement: function(tree) {
  11727. this.visitAny(tree.condition);
  11728. this.visitAny(tree.body);
  11729. },
  11730. visitWithStatement: function(tree) {
  11731. this.visitAny(tree.expression);
  11732. this.visitAny(tree.body);
  11733. },
  11734. visitYieldExpression: function(tree) {
  11735. this.visitAny(tree.expression);
  11736. }
  11737. }, {});
  11738. }();
  11739. return {get ParseTreeVisitor() {
  11740. return ParseTreeVisitor;
  11741. }};
  11742. });
  11743. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindVisitor.js", [], function() {
  11744. "use strict";
  11745. var __moduleName = "traceur@0.0.112/src/codegeneration/FindVisitor.js";
  11746. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/FindVisitor.js")).ParseTreeVisitor;
  11747. var FindVisitor = function($__super) {
  11748. function FindVisitor() {
  11749. var keepOnGoing = arguments[0];
  11750. $traceurRuntime.superConstructor(FindVisitor).call(this);
  11751. this.found_ = false;
  11752. this.shouldContinue_ = true;
  11753. this.keepOnGoing_ = keepOnGoing;
  11754. }
  11755. return ($traceurRuntime.createClass)(FindVisitor, {
  11756. get found() {
  11757. return this.found_;
  11758. },
  11759. set found(v) {
  11760. if (v) {
  11761. this.found_ = true;
  11762. if (!this.keepOnGoing_)
  11763. this.shouldContinue_ = false;
  11764. }
  11765. },
  11766. visitAny: function(tree) {
  11767. this.shouldContinue_ && tree && tree.visit(this);
  11768. },
  11769. visitList: function(list) {
  11770. if (list) {
  11771. for (var i = 0; this.shouldContinue_ && i < list.length; i++) {
  11772. this.visitAny(list[i]);
  11773. }
  11774. }
  11775. }
  11776. }, {}, $__super);
  11777. }(ParseTreeVisitor);
  11778. return {get FindVisitor() {
  11779. return FindVisitor;
  11780. }};
  11781. });
  11782. $traceurRuntime.registerModule("traceur@0.0.112/src/util/SyntaxErrorReporter.js", [], function() {
  11783. "use strict";
  11784. var __moduleName = "traceur@0.0.112/src/util/SyntaxErrorReporter.js";
  11785. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ErrorReporter.js", "traceur@0.0.112/src/util/SyntaxErrorReporter.js")),
  11786. ErrorReporter = $__1.ErrorReporter,
  11787. format = $__1.format;
  11788. var SyntaxErrorReporter = function($__super) {
  11789. function SyntaxErrorReporter() {
  11790. $traceurRuntime.superConstructor(SyntaxErrorReporter).apply(this, arguments);
  11791. }
  11792. return ($traceurRuntime.createClass)(SyntaxErrorReporter, {reportMessageInternal: function(location, message) {
  11793. var s = format(location, message);
  11794. throw new SyntaxError(s);
  11795. }}, {}, $__super);
  11796. }(ErrorReporter);
  11797. return {get SyntaxErrorReporter() {
  11798. return SyntaxErrorReporter;
  11799. }};
  11800. });
  11801. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/JsxIdentifierToken.js", [], function() {
  11802. "use strict";
  11803. var __moduleName = "traceur@0.0.112/src/syntax/JsxIdentifierToken.js";
  11804. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/JsxIdentifierToken.js")).Token;
  11805. var JSX_IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/JsxIdentifierToken.js")).JSX_IDENTIFIER;
  11806. var JsxIdentifierToken = function($__super) {
  11807. function JsxIdentifierToken(location, value) {
  11808. $traceurRuntime.superConstructor(JsxIdentifierToken).call(this, JSX_IDENTIFIER, location);
  11809. this.value = value;
  11810. }
  11811. return ($traceurRuntime.createClass)(JsxIdentifierToken, {toString: function() {
  11812. return this.value;
  11813. }}, {}, $__super);
  11814. }(Token);
  11815. return {get JsxIdentifierToken() {
  11816. return JsxIdentifierToken;
  11817. }};
  11818. });
  11819. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Keywords.js", [], function() {
  11820. "use strict";
  11821. var __moduleName = "traceur@0.0.112/src/syntax/Keywords.js";
  11822. var keywords = ['break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'enum', 'extends', 'null', 'true', 'false'];
  11823. var strictKeywords = ['implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];
  11824. var keywordsByName = Object.create(null);
  11825. var NORMAL_KEYWORD = 1;
  11826. var STRICT_KEYWORD = 2;
  11827. keywords.forEach(function(value) {
  11828. keywordsByName[value] = NORMAL_KEYWORD;
  11829. });
  11830. strictKeywords.forEach(function(value) {
  11831. keywordsByName[value] = STRICT_KEYWORD;
  11832. });
  11833. function getKeywordType(value) {
  11834. return keywordsByName[value];
  11835. }
  11836. function isStrictKeyword(value) {
  11837. return getKeywordType(value) === STRICT_KEYWORD;
  11838. }
  11839. return {
  11840. get NORMAL_KEYWORD() {
  11841. return NORMAL_KEYWORD;
  11842. },
  11843. get STRICT_KEYWORD() {
  11844. return STRICT_KEYWORD;
  11845. },
  11846. get getKeywordType() {
  11847. return getKeywordType;
  11848. },
  11849. get isStrictKeyword() {
  11850. return isStrictKeyword;
  11851. }
  11852. };
  11853. });
  11854. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/KeywordToken.js", [], function() {
  11855. "use strict";
  11856. var __moduleName = "traceur@0.0.112/src/syntax/KeywordToken.js";
  11857. var STRICT_KEYWORD = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/KeywordToken.js")).STRICT_KEYWORD;
  11858. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/KeywordToken.js")).Token;
  11859. var KeywordToken = function($__super) {
  11860. function KeywordToken(type, keywordType, location) {
  11861. $traceurRuntime.superConstructor(KeywordToken).call(this, type, location);
  11862. this.isStrictKeyword_ = keywordType === STRICT_KEYWORD;
  11863. }
  11864. return ($traceurRuntime.createClass)(KeywordToken, {
  11865. isKeyword: function() {
  11866. return true;
  11867. },
  11868. isStrictKeyword: function() {
  11869. return this.isStrictKeyword_;
  11870. }
  11871. }, {}, $__super);
  11872. }(Token);
  11873. return {get KeywordToken() {
  11874. return KeywordToken;
  11875. }};
  11876. });
  11877. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/unicode-tables.js", [], function() {
  11878. "use strict";
  11879. var __moduleName = "traceur@0.0.112/src/syntax/unicode-tables.js";
  11880. var idStartTable = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 442, 443, 443, 444, 447, 448, 451, 452, 659, 660, 660, 661, 687, 688, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 883, 884, 884, 886, 887, 890, 890, 891, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1599, 1600, 1600, 1601, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2226, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2417, 2418, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3653, 3654, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4348, 4349, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5873, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6210, 6211, 6211, 6212, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7287, 7288, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7467, 7468, 7530, 7531, 7543, 7544, 7544, 7545, 7578, 7579, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8472, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8494, 8494, 8495, 8500, 8501, 8504, 8505, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8578, 8579, 8580, 8581, 8584, 11264, 11310, 11312, 11358, 11360, 11387, 11388, 11389, 11390, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12293, 12294, 12294, 12295, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12347, 12347, 12348, 12348, 12353, 12438, 12443, 12444, 12445, 12446, 12447, 12447, 12449, 12538, 12540, 12542, 12543, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 40980, 40981, 40981, 40982, 42124, 42192, 42231, 42232, 42237, 42240, 42507, 42508, 42508, 42512, 42527, 42538, 42539, 42560, 42605, 42606, 42606, 42623, 42623, 42624, 42651, 42652, 42653, 42656, 42725, 42726, 42735, 42775, 42783, 42786, 42863, 42864, 42864, 42865, 42887, 42888, 42888, 42891, 42894, 42896, 42925, 42928, 42929, 42999, 42999, 43000, 43001, 43002, 43002, 43003, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43494, 43495, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43631, 43632, 43632, 43633, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43740, 43741, 43741, 43744, 43754, 43762, 43762, 43763, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43871, 43876, 43877, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65391, 65392, 65392, 65393, 65437, 65438, 65439, 65440, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66352, 66368, 66369, 66369, 66370, 66377, 66378, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66639, 66640, 66717, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68147, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70144, 70161, 70163, 70187, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70493, 70497, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71168, 71215, 71236, 71236, 71296, 71338, 71840, 71903, 71935, 71935, 72384, 72440, 73728, 74648, 74752, 74862, 77824, 78894, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93952, 94020, 94032, 94032, 94099, 94111, 110592, 110593, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 124928, 125124, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 194560, 195101];
  11881. var idContinueTable = [183, 183, 768, 879, 903, 903, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1552, 1562, 1611, 1631, 1632, 1641, 1648, 1648, 1750, 1756, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2276, 2306, 2307, 2307, 2362, 2362, 2363, 2363, 2364, 2364, 2366, 2368, 2369, 2376, 2377, 2380, 2381, 2381, 2382, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2433, 2434, 2435, 2492, 2492, 2494, 2496, 2497, 2500, 2503, 2504, 2507, 2508, 2509, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2562, 2563, 2563, 2620, 2620, 2622, 2624, 2625, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2671, 2672, 2673, 2677, 2677, 2689, 2690, 2691, 2691, 2748, 2748, 2750, 2752, 2753, 2757, 2759, 2760, 2761, 2761, 2763, 2764, 2765, 2765, 2786, 2787, 2790, 2799, 2817, 2817, 2818, 2819, 2876, 2876, 2878, 2878, 2879, 2879, 2880, 2880, 2881, 2884, 2887, 2888, 2891, 2892, 2893, 2893, 2902, 2902, 2903, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3007, 3008, 3008, 3009, 3010, 3014, 3016, 3018, 3020, 3021, 3021, 3031, 3031, 3046, 3055, 3072, 3072, 3073, 3075, 3134, 3136, 3137, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3201, 3202, 3203, 3260, 3260, 3262, 3262, 3263, 3263, 3264, 3268, 3270, 3270, 3271, 3272, 3274, 3275, 3276, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3329, 3329, 3330, 3331, 3390, 3392, 3393, 3396, 3398, 3400, 3402, 3404, 3405, 3405, 3415, 3415, 3426, 3427, 3430, 3439, 3458, 3459, 3530, 3530, 3535, 3537, 3538, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3903, 3953, 3966, 3967, 3967, 3968, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4139, 4140, 4141, 4144, 4145, 4145, 4146, 4151, 4152, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4160, 4169, 4182, 4183, 4184, 4185, 4190, 4192, 4194, 4196, 4199, 4205, 4209, 4212, 4226, 4226, 4227, 4228, 4229, 4230, 4231, 4236, 4237, 4237, 4239, 4239, 4240, 4249, 4250, 4252, 4253, 4253, 4957, 4959, 4969, 4977, 5906, 5908, 5938, 5940, 5970, 5971, 6002, 6003, 6068, 6069, 6070, 6070, 6071, 6077, 6078, 6085, 6086, 6086, 6087, 6088, 6089, 6099, 6109, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6313, 6313, 6432, 6434, 6435, 6438, 6439, 6440, 6441, 6443, 6448, 6449, 6450, 6450, 6451, 6456, 6457, 6459, 6470, 6479, 6576, 6592, 6600, 6601, 6608, 6617, 6618, 6618, 6679, 6680, 6681, 6682, 6683, 6683, 6741, 6741, 6742, 6742, 6743, 6743, 6744, 6750, 6752, 6752, 6753, 6753, 6754, 6754, 6755, 6756, 6757, 6764, 6765, 6770, 6771, 6780, 6783, 6783, 6784, 6793, 6800, 6809, 6832, 6845, 6912, 6915, 6916, 6916, 6964, 6964, 6965, 6965, 6966, 6970, 6971, 6971, 6972, 6972, 6973, 6977, 6978, 6978, 6979, 6980, 6992, 7001, 7019, 7027, 7040, 7041, 7042, 7042, 7073, 7073, 7074, 7077, 7078, 7079, 7080, 7081, 7082, 7082, 7083, 7085, 7088, 7097, 7142, 7142, 7143, 7143, 7144, 7145, 7146, 7148, 7149, 7149, 7150, 7150, 7151, 7153, 7154, 7155, 7204, 7211, 7212, 7219, 7220, 7221, 7222, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7392, 7393, 7393, 7394, 7400, 7405, 7405, 7410, 7411, 7412, 7412, 7416, 7417, 7616, 7669, 7676, 7679, 8255, 8256, 8276, 8276, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12333, 12334, 12335, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42655, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43043, 43044, 43045, 43046, 43047, 43047, 43136, 43137, 43188, 43203, 43204, 43204, 43216, 43225, 43232, 43249, 43264, 43273, 43302, 43309, 43335, 43345, 43346, 43347, 43392, 43394, 43395, 43395, 43443, 43443, 43444, 43445, 43446, 43449, 43450, 43451, 43452, 43452, 43453, 43456, 43472, 43481, 43493, 43493, 43504, 43513, 43561, 43566, 43567, 43568, 43569, 43570, 43571, 43572, 43573, 43574, 43587, 43587, 43596, 43596, 43597, 43597, 43600, 43609, 43643, 43643, 43644, 43644, 43645, 43645, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43755, 43755, 43756, 43757, 43758, 43759, 43765, 43765, 43766, 43766, 44003, 44004, 44005, 44005, 44006, 44007, 44008, 44008, 44009, 44010, 44012, 44012, 44013, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65069, 65075, 65076, 65101, 65103, 65296, 65305, 65343, 65343, 66045, 66045, 66272, 66272, 66422, 66426, 66720, 66729, 68097, 68099, 68101, 68102, 68108, 68111, 68152, 68154, 68159, 68159, 68325, 68326, 69632, 69632, 69633, 69633, 69634, 69634, 69688, 69702, 69734, 69743, 69759, 69761, 69762, 69762, 69808, 69810, 69811, 69814, 69815, 69816, 69817, 69818, 69872, 69881, 69888, 69890, 69927, 69931, 69932, 69932, 69933, 69940, 69942, 69951, 70003, 70003, 70016, 70017, 70018, 70018, 70067, 70069, 70070, 70078, 70079, 70080, 70096, 70105, 70188, 70190, 70191, 70193, 70194, 70195, 70196, 70196, 70197, 70197, 70198, 70199, 70367, 70367, 70368, 70370, 70371, 70378, 70384, 70393, 70401, 70401, 70402, 70403, 70460, 70460, 70462, 70463, 70464, 70464, 70465, 70468, 70471, 70472, 70475, 70477, 70487, 70487, 70498, 70499, 70502, 70508, 70512, 70516, 70832, 70834, 70835, 70840, 70841, 70841, 70842, 70842, 70843, 70846, 70847, 70848, 70849, 70849, 70850, 70851, 70864, 70873, 71087, 71089, 71090, 71093, 71096, 71099, 71100, 71101, 71102, 71102, 71103, 71104, 71216, 71218, 71219, 71226, 71227, 71228, 71229, 71229, 71230, 71230, 71231, 71232, 71248, 71257, 71339, 71339, 71340, 71340, 71341, 71341, 71342, 71343, 71344, 71349, 71350, 71350, 71351, 71351, 71360, 71369, 71904, 71913, 92768, 92777, 92912, 92916, 92976, 92982, 93008, 93017, 94033, 94078, 94095, 94098, 113821, 113822, 119141, 119142, 119143, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 120782, 120831, 125136, 125142, 917760, 917999];
  11882. return {
  11883. get idStartTable() {
  11884. return idStartTable;
  11885. },
  11886. get idContinueTable() {
  11887. return idContinueTable;
  11888. }
  11889. };
  11890. });
  11891. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Scanner.js", [], function() {
  11892. "use strict";
  11893. var __moduleName = "traceur@0.0.112/src/syntax/Scanner.js";
  11894. var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./IdentifierToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).IdentifierToken;
  11895. var JsxIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxIdentifierToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).JsxIdentifierToken;
  11896. var KeywordToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./KeywordToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).KeywordToken;
  11897. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LiteralToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).LiteralToken;
  11898. var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/Scanner.js")).SourceRange;
  11899. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/Scanner.js")).Token;
  11900. var getKeywordType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/Scanner.js")).getKeywordType;
  11901. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./unicode-tables.js", "traceur@0.0.112/src/syntax/Scanner.js")),
  11902. idContinueTable = $__10.idContinueTable,
  11903. idStartTable = $__10.idStartTable;
  11904. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Scanner.js")),
  11905. AMPERSAND = $__11.AMPERSAND,
  11906. AMPERSAND_EQUAL = $__11.AMPERSAND_EQUAL,
  11907. AND = $__11.AND,
  11908. ARROW = $__11.ARROW,
  11909. AT = $__11.AT,
  11910. BANG = $__11.BANG,
  11911. BAR = $__11.BAR,
  11912. BAR_EQUAL = $__11.BAR_EQUAL,
  11913. CARET = $__11.CARET,
  11914. CARET_EQUAL = $__11.CARET_EQUAL,
  11915. CLOSE_ANGLE = $__11.CLOSE_ANGLE,
  11916. CLOSE_CURLY = $__11.CLOSE_CURLY,
  11917. CLOSE_PAREN = $__11.CLOSE_PAREN,
  11918. CLOSE_SQUARE = $__11.CLOSE_SQUARE,
  11919. COLON = $__11.COLON,
  11920. COMMA = $__11.COMMA,
  11921. DOT_DOT_DOT = $__11.DOT_DOT_DOT,
  11922. END_OF_FILE = $__11.END_OF_FILE,
  11923. EQUAL = $__11.EQUAL,
  11924. EQUAL_EQUAL = $__11.EQUAL_EQUAL,
  11925. EQUAL_EQUAL_EQUAL = $__11.EQUAL_EQUAL_EQUAL,
  11926. ERROR = $__11.ERROR,
  11927. GREATER_EQUAL = $__11.GREATER_EQUAL,
  11928. LEFT_SHIFT = $__11.LEFT_SHIFT,
  11929. LEFT_SHIFT_EQUAL = $__11.LEFT_SHIFT_EQUAL,
  11930. LESS_EQUAL = $__11.LESS_EQUAL,
  11931. MINUS = $__11.MINUS,
  11932. MINUS_EQUAL = $__11.MINUS_EQUAL,
  11933. MINUS_MINUS = $__11.MINUS_MINUS,
  11934. NO_SUBSTITUTION_TEMPLATE = $__11.NO_SUBSTITUTION_TEMPLATE,
  11935. NOT_EQUAL = $__11.NOT_EQUAL,
  11936. NOT_EQUAL_EQUAL = $__11.NOT_EQUAL_EQUAL,
  11937. NUMBER = $__11.NUMBER,
  11938. OPEN_ANGLE = $__11.OPEN_ANGLE,
  11939. OPEN_CURLY = $__11.OPEN_CURLY,
  11940. OPEN_PAREN = $__11.OPEN_PAREN,
  11941. OPEN_SQUARE = $__11.OPEN_SQUARE,
  11942. OR = $__11.OR,
  11943. PERCENT = $__11.PERCENT,
  11944. PERCENT_EQUAL = $__11.PERCENT_EQUAL,
  11945. PERIOD = $__11.PERIOD,
  11946. PLUS = $__11.PLUS,
  11947. PLUS_EQUAL = $__11.PLUS_EQUAL,
  11948. PLUS_PLUS = $__11.PLUS_PLUS,
  11949. QUESTION = $__11.QUESTION,
  11950. REGULAR_EXPRESSION = $__11.REGULAR_EXPRESSION,
  11951. RIGHT_SHIFT = $__11.RIGHT_SHIFT,
  11952. RIGHT_SHIFT_EQUAL = $__11.RIGHT_SHIFT_EQUAL,
  11953. SEMI_COLON = $__11.SEMI_COLON,
  11954. SLASH = $__11.SLASH,
  11955. SLASH_EQUAL = $__11.SLASH_EQUAL,
  11956. STAR = $__11.STAR,
  11957. STAR_EQUAL = $__11.STAR_EQUAL,
  11958. STAR_STAR = $__11.STAR_STAR,
  11959. STAR_STAR_EQUAL = $__11.STAR_STAR_EQUAL,
  11960. STRING = $__11.STRING,
  11961. TEMPLATE_HEAD = $__11.TEMPLATE_HEAD,
  11962. TEMPLATE_MIDDLE = $__11.TEMPLATE_MIDDLE,
  11963. TEMPLATE_TAIL = $__11.TEMPLATE_TAIL,
  11964. TILDE = $__11.TILDE,
  11965. UNSIGNED_RIGHT_SHIFT = $__11.UNSIGNED_RIGHT_SHIFT,
  11966. UNSIGNED_RIGHT_SHIFT_EQUAL = $__11.UNSIGNED_RIGHT_SHIFT_EQUAL;
  11967. var isWhitespaceArray = [];
  11968. for (var i = 0; i < 128; i++) {
  11969. isWhitespaceArray[i] = i >= 9 && i <= 13 || i === 0x20;
  11970. }
  11971. function isWhitespace(code) {
  11972. if (code < 128)
  11973. return isWhitespaceArray[code];
  11974. switch (code) {
  11975. case 0xA0:
  11976. case 0xFEFF:
  11977. case 0x2028:
  11978. case 0x2029:
  11979. return true;
  11980. }
  11981. return false;
  11982. }
  11983. function isLineTerminator(code) {
  11984. switch (code) {
  11985. case 10:
  11986. case 13:
  11987. case 0x2028:
  11988. case 0x2029:
  11989. return true;
  11990. }
  11991. return false;
  11992. }
  11993. function isDecimalDigit(code) {
  11994. return code >= 48 && code <= 57;
  11995. }
  11996. var isHexDigitArray = [];
  11997. for (var i$__0 = 0; i$__0 < 128; i$__0++) {
  11998. isHexDigitArray[i$__0] = i$__0 >= 48 && i$__0 <= 57 || i$__0 >= 65 && i$__0 <= 70 || i$__0 >= 97 && i$__0 <= 102;
  11999. }
  12000. function isHexDigit(code) {
  12001. return code < 128 && isHexDigitArray[code];
  12002. }
  12003. function isBinaryDigit(code) {
  12004. return code === 48 || code === 49;
  12005. }
  12006. function isOctalDigit(code) {
  12007. return code >= 48 && code <= 55;
  12008. }
  12009. var isIdentifierStartArray = [];
  12010. for (var i$__1 = 0; i$__1 < 128; i$__1++) {
  12011. isIdentifierStartArray[i$__1] = i$__1 === 36 || i$__1 >= 65 && i$__1 <= 90 || i$__1 === 95 || i$__1 >= 97 && i$__1 <= 122;
  12012. }
  12013. function isIdentifierStart(code) {
  12014. return code < 128 ? isIdentifierStartArray[code] : inTable(idStartTable, code);
  12015. }
  12016. var isIdentifierPartArray = [];
  12017. for (var i$__2 = 0; i$__2 < 128; i$__2++) {
  12018. isIdentifierPartArray[i$__2] = isIdentifierStart(i$__2) || isDecimalDigit(i$__2);
  12019. }
  12020. function isIdentifierPart(code) {
  12021. return code < 128 ? isIdentifierPartArray[code] : inTable(idStartTable, code) || inTable(idContinueTable, code) || code === 8204 || code === 8205;
  12022. }
  12023. function inTable(table, code) {
  12024. for (var i = 0; i < table.length; ) {
  12025. if (code < table[i++])
  12026. return false;
  12027. if (code <= table[i++])
  12028. return true;
  12029. }
  12030. return false;
  12031. }
  12032. function isRegularExpressionChar(code) {
  12033. switch (code) {
  12034. case 47:
  12035. return false;
  12036. case 91:
  12037. case 92:
  12038. return true;
  12039. }
  12040. return !isLineTerminator(code);
  12041. }
  12042. function isRegularExpressionFirstChar(code) {
  12043. return isRegularExpressionChar(code) && code !== 42;
  12044. }
  12045. var index,
  12046. input,
  12047. length,
  12048. token,
  12049. lastToken,
  12050. lookaheadToken,
  12051. currentCharCode,
  12052. lineNumberTable,
  12053. errorReporter,
  12054. currentParser,
  12055. options;
  12056. function init(reporter, file, parser, traceurOptions) {
  12057. errorReporter = reporter;
  12058. lineNumberTable = file.lineNumberTable;
  12059. input = file.contents;
  12060. length = file.contents.length;
  12061. setIndex(0);
  12062. currentParser = parser;
  12063. options = traceurOptions;
  12064. }
  12065. function getLastToken() {
  12066. return lastToken;
  12067. }
  12068. function nextRegularExpressionLiteralToken() {
  12069. lastToken = nextRegularExpressionLiteralToken2();
  12070. token = scanToken();
  12071. return lastToken;
  12072. }
  12073. function nextTemplateLiteralToken() {
  12074. var t = nextTemplateLiteralToken2();
  12075. token = scanToken();
  12076. return t;
  12077. }
  12078. function setIndex(i) {
  12079. index = i;
  12080. lastToken = null;
  12081. token = null;
  12082. lookaheadToken = null;
  12083. updateCurrentCharCode();
  12084. }
  12085. function getPosition() {
  12086. return getPositionByOffset(getOffset());
  12087. }
  12088. function getPositionByOffset(offset) {
  12089. return lineNumberTable.getSourcePosition(offset);
  12090. }
  12091. function nextCloseAngle() {
  12092. switch (token.type) {
  12093. case GREATER_EQUAL:
  12094. case RIGHT_SHIFT:
  12095. case RIGHT_SHIFT_EQUAL:
  12096. case UNSIGNED_RIGHT_SHIFT:
  12097. case UNSIGNED_RIGHT_SHIFT_EQUAL:
  12098. setIndex(index - token.type.length + 1);
  12099. lastToken = createToken(CLOSE_ANGLE, index);
  12100. token = scanToken();
  12101. return lastToken;
  12102. }
  12103. return nextToken();
  12104. }
  12105. function getTokenRange(startOffset) {
  12106. return lineNumberTable.getSourceRange(startOffset, index);
  12107. }
  12108. function getOffset() {
  12109. return token ? token.location.start.offset : index;
  12110. }
  12111. function nextRegularExpressionLiteralToken2() {
  12112. var beginIndex = index - token.toString().length;
  12113. if (token.type === SLASH_EQUAL) {
  12114. skipRegularExpressionBodyContinuation();
  12115. } else {
  12116. skipRegularExpressionBody(beginIndex);
  12117. }
  12118. if (currentCharCode !== 47) {
  12119. reportError('Expected \'/\' in regular expression literal', beginIndex);
  12120. return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex));
  12121. }
  12122. next();
  12123. while (isIdentifierPart(currentCharCode)) {
  12124. next();
  12125. }
  12126. return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex));
  12127. }
  12128. function skipRegularExpressionBody(beginIndex) {
  12129. if (!isRegularExpressionFirstChar(currentCharCode)) {
  12130. reportError('Expected regular expression first char', beginIndex);
  12131. return;
  12132. }
  12133. skipRegularExpressionBodyContinuation();
  12134. }
  12135. function skipRegularExpressionBodyContinuation() {
  12136. while (!isAtEnd() && isRegularExpressionChar(currentCharCode)) {
  12137. if (!skipRegularExpressionChar()) {
  12138. return;
  12139. }
  12140. }
  12141. }
  12142. function skipRegularExpressionChar() {
  12143. switch (currentCharCode) {
  12144. case 92:
  12145. return skipRegularExpressionBackslashSequence();
  12146. case 91:
  12147. return skipRegularExpressionClass();
  12148. default:
  12149. next();
  12150. return true;
  12151. }
  12152. }
  12153. function skipRegularExpressionBackslashSequence() {
  12154. var beginIndex = index;
  12155. next();
  12156. if (isLineTerminator(currentCharCode) || isAtEnd()) {
  12157. reportError('New line not allowed in regular expression literal', beginIndex, index);
  12158. return false;
  12159. }
  12160. next();
  12161. return true;
  12162. }
  12163. function skipRegularExpressionClass() {
  12164. var beginIndex = index;
  12165. next();
  12166. while (!isAtEnd() && peekRegularExpressionClassChar()) {
  12167. if (!skipRegularExpressionClassChar()) {
  12168. return false;
  12169. }
  12170. }
  12171. if (currentCharCode !== 93) {
  12172. reportError('\']\' expected', beginIndex, index);
  12173. return false;
  12174. }
  12175. next();
  12176. return true;
  12177. }
  12178. function peekRegularExpressionClassChar() {
  12179. return currentCharCode !== 93 && !isLineTerminator(currentCharCode);
  12180. }
  12181. function skipRegularExpressionClassChar() {
  12182. if (currentCharCode === 92) {
  12183. return skipRegularExpressionBackslashSequence();
  12184. }
  12185. next();
  12186. return true;
  12187. }
  12188. function skipTemplateCharacter() {
  12189. while (!isAtEnd()) {
  12190. switch (currentCharCode) {
  12191. case 96:
  12192. return;
  12193. case 92:
  12194. skipStringLiteralEscapeSequence();
  12195. break;
  12196. case 36:
  12197. {
  12198. var code = input.charCodeAt(index + 1);
  12199. if (code === 123)
  12200. return;
  12201. next();
  12202. break;
  12203. }
  12204. default:
  12205. next();
  12206. }
  12207. }
  12208. }
  12209. function scanTemplateStart(beginIndex) {
  12210. if (isAtEnd()) {
  12211. reportError('Unterminated template literal', beginIndex, index);
  12212. return lastToken = createToken(END_OF_FILE, beginIndex);
  12213. }
  12214. return nextTemplateLiteralTokenShared(NO_SUBSTITUTION_TEMPLATE, TEMPLATE_HEAD);
  12215. }
  12216. function nextTemplateLiteralToken2() {
  12217. if (isAtEnd()) {
  12218. reportError('Expected \'}\' after expression in template literal', index, index);
  12219. return createToken(END_OF_FILE, index);
  12220. }
  12221. if (token.type !== CLOSE_CURLY) {
  12222. reportError('Expected \'}\' after expression in template literal', index, index);
  12223. return createToken(ERROR, index);
  12224. }
  12225. return nextTemplateLiteralTokenShared(TEMPLATE_TAIL, TEMPLATE_MIDDLE);
  12226. }
  12227. function nextTemplateLiteralTokenShared(endType, middleType) {
  12228. var beginIndex = index;
  12229. skipTemplateCharacter();
  12230. if (isAtEnd()) {
  12231. reportError('Unterminated template literal');
  12232. return createToken(ERROR, beginIndex);
  12233. }
  12234. var value = getTokenString(beginIndex);
  12235. switch (currentCharCode) {
  12236. case 96:
  12237. next();
  12238. return lastToken = new LiteralToken(endType, value, getTokenRange(beginIndex - 1));
  12239. case 36:
  12240. next();
  12241. next();
  12242. return lastToken = new LiteralToken(middleType, value, getTokenRange(beginIndex - 1));
  12243. }
  12244. }
  12245. function peekJsxToken() {
  12246. return token || (token = scanJsxToken());
  12247. }
  12248. function nextJsxToken() {
  12249. lastToken = peekJsxToken();
  12250. token = null;
  12251. return lastToken;
  12252. }
  12253. function scanJsxToken() {
  12254. skipComments();
  12255. var beginIndex = index;
  12256. switch (currentCharCode) {
  12257. case 34:
  12258. case 39:
  12259. return scanJsxStringLiteral(beginIndex, currentCharCode);
  12260. case 62:
  12261. next();
  12262. return createToken(CLOSE_ANGLE, beginIndex);
  12263. }
  12264. if (!isIdentifierStart(currentCharCode)) {
  12265. return scanToken();
  12266. }
  12267. next();
  12268. while (isIdentifierPart(currentCharCode) || currentCharCode === 45) {
  12269. next();
  12270. }
  12271. var value = input.slice(beginIndex, index);
  12272. return new JsxIdentifierToken(getTokenRange(beginIndex), value);
  12273. }
  12274. function scanJsxStringLiteral(beginIndex, terminator) {
  12275. next();
  12276. while (!isAtEnd() && currentCharCode !== terminator) {
  12277. next();
  12278. }
  12279. if (currentCharCode !== terminator) {
  12280. reportError('Unterminated String Literal', beginIndex);
  12281. } else {
  12282. next();
  12283. }
  12284. return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));
  12285. }
  12286. function nextJsxTextToken() {
  12287. lastToken = token || scanJsxTextToken();
  12288. token = null;
  12289. return lastToken;
  12290. }
  12291. function skipJsxText() {
  12292. while (!isAtEnd() && peekJsxText()) {
  12293. next();
  12294. }
  12295. }
  12296. function isJsxTextChar(code) {
  12297. switch (code) {
  12298. case 60:
  12299. case 123:
  12300. return false;
  12301. }
  12302. return true;
  12303. }
  12304. function skipJsxText() {
  12305. while (!isAtEnd() && isJsxTextChar(currentCharCode)) {
  12306. next();
  12307. }
  12308. }
  12309. function scanJsxTextToken() {
  12310. var beginIndex = index;
  12311. if (isAtEnd()) {
  12312. return createToken(END_OF_FILE, beginIndex);
  12313. }
  12314. skipJsxText();
  12315. if (beginIndex === index) {
  12316. switch (currentCharCode) {
  12317. case 60:
  12318. next();
  12319. return createToken(OPEN_ANGLE, beginIndex);
  12320. case 123:
  12321. next();
  12322. return createToken(OPEN_CURLY, beginIndex);
  12323. }
  12324. }
  12325. return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));
  12326. }
  12327. function nextToken() {
  12328. var t = peekToken();
  12329. token = lookaheadToken || scanToken();
  12330. lookaheadToken = null;
  12331. lastToken = t;
  12332. return t;
  12333. }
  12334. function peekTokenNoLineTerminator() {
  12335. var t = peekToken();
  12336. var start = lastToken.location.end.offset;
  12337. var end = t.location.start.offset;
  12338. for (var i = start; i < end; i++) {
  12339. if (isLineTerminator(input.charCodeAt(i))) {
  12340. return null;
  12341. }
  12342. }
  12343. return t;
  12344. }
  12345. function peek(expectedType) {
  12346. return peekToken().type === expectedType;
  12347. }
  12348. function peekLookahead(expectedType) {
  12349. return peekTokenLookahead().type === expectedType;
  12350. }
  12351. function peekToken() {
  12352. return token || (token = scanToken());
  12353. }
  12354. function peekType() {
  12355. return peekToken().type;
  12356. }
  12357. function peekLocation() {
  12358. return peekToken().location;
  12359. }
  12360. function peekTokenLookahead() {
  12361. if (!token)
  12362. token = scanToken();
  12363. if (!lookaheadToken)
  12364. lookaheadToken = scanToken();
  12365. return lookaheadToken;
  12366. }
  12367. function skipWhitespace() {
  12368. while (!isAtEnd() && peekWhitespace()) {
  12369. next();
  12370. }
  12371. }
  12372. function peekWhitespace() {
  12373. return isWhitespace(currentCharCode);
  12374. }
  12375. function skipComments() {
  12376. while (skipComment()) {}
  12377. }
  12378. function skipComment() {
  12379. skipWhitespace();
  12380. var code = currentCharCode;
  12381. if (code === 47) {
  12382. code = input.charCodeAt(index + 1);
  12383. switch (code) {
  12384. case 47:
  12385. skipSingleLineComment();
  12386. return true;
  12387. case 42:
  12388. skipMultiLineComment();
  12389. return true;
  12390. }
  12391. }
  12392. return false;
  12393. }
  12394. function commentCallback(start, index) {
  12395. if (options.commentCallback)
  12396. currentParser.handleComment(lineNumberTable.getSourceRange(start, index));
  12397. }
  12398. function skipSingleLineComment() {
  12399. var start = index;
  12400. index += 2;
  12401. while (!isAtEnd() && !isLineTerminator(input.charCodeAt(index++))) {}
  12402. updateCurrentCharCode();
  12403. commentCallback(start, index);
  12404. }
  12405. function skipMultiLineComment() {
  12406. var start = index;
  12407. var i = input.indexOf('*/', index + 2);
  12408. if (i !== -1)
  12409. index = i + 2;
  12410. else
  12411. index = length;
  12412. updateCurrentCharCode();
  12413. commentCallback(start, index);
  12414. }
  12415. function scanToken() {
  12416. skipComments();
  12417. var beginIndex = index;
  12418. if (isAtEnd())
  12419. return createToken(END_OF_FILE, beginIndex);
  12420. var code = currentCharCode;
  12421. next();
  12422. switch (code) {
  12423. case 123:
  12424. return createToken(OPEN_CURLY, beginIndex);
  12425. case 125:
  12426. return createToken(CLOSE_CURLY, beginIndex);
  12427. case 40:
  12428. return createToken(OPEN_PAREN, beginIndex);
  12429. case 41:
  12430. return createToken(CLOSE_PAREN, beginIndex);
  12431. case 91:
  12432. return createToken(OPEN_SQUARE, beginIndex);
  12433. case 93:
  12434. return createToken(CLOSE_SQUARE, beginIndex);
  12435. case 46:
  12436. switch (currentCharCode) {
  12437. case 46:
  12438. if (input.charCodeAt(index + 1) === 46) {
  12439. next();
  12440. next();
  12441. return createToken(DOT_DOT_DOT, beginIndex);
  12442. }
  12443. break;
  12444. default:
  12445. if (isDecimalDigit(currentCharCode))
  12446. return scanNumberPostPeriod(beginIndex);
  12447. }
  12448. return createToken(PERIOD, beginIndex);
  12449. case 59:
  12450. return createToken(SEMI_COLON, beginIndex);
  12451. case 44:
  12452. return createToken(COMMA, beginIndex);
  12453. case 126:
  12454. return createToken(TILDE, beginIndex);
  12455. case 63:
  12456. return createToken(QUESTION, beginIndex);
  12457. case 58:
  12458. return createToken(COLON, beginIndex);
  12459. case 60:
  12460. switch (currentCharCode) {
  12461. case 60:
  12462. next();
  12463. if (currentCharCode === 61) {
  12464. next();
  12465. return createToken(LEFT_SHIFT_EQUAL, beginIndex);
  12466. }
  12467. return createToken(LEFT_SHIFT, beginIndex);
  12468. case 61:
  12469. next();
  12470. return createToken(LESS_EQUAL, beginIndex);
  12471. default:
  12472. return createToken(OPEN_ANGLE, beginIndex);
  12473. }
  12474. case 62:
  12475. switch (currentCharCode) {
  12476. case 62:
  12477. next();
  12478. switch (currentCharCode) {
  12479. case 61:
  12480. next();
  12481. return createToken(RIGHT_SHIFT_EQUAL, beginIndex);
  12482. case 62:
  12483. next();
  12484. if (currentCharCode === 61) {
  12485. next();
  12486. return createToken(UNSIGNED_RIGHT_SHIFT_EQUAL, beginIndex);
  12487. }
  12488. return createToken(UNSIGNED_RIGHT_SHIFT, beginIndex);
  12489. default:
  12490. return createToken(RIGHT_SHIFT, beginIndex);
  12491. }
  12492. case 61:
  12493. next();
  12494. return createToken(GREATER_EQUAL, beginIndex);
  12495. default:
  12496. return createToken(CLOSE_ANGLE, beginIndex);
  12497. }
  12498. case 61:
  12499. if (currentCharCode === 61) {
  12500. next();
  12501. if (currentCharCode === 61) {
  12502. next();
  12503. return createToken(EQUAL_EQUAL_EQUAL, beginIndex);
  12504. }
  12505. return createToken(EQUAL_EQUAL, beginIndex);
  12506. }
  12507. if (currentCharCode === 62 && options.arrowFunctions) {
  12508. next();
  12509. return createToken(ARROW, beginIndex);
  12510. }
  12511. return createToken(EQUAL, beginIndex);
  12512. case 33:
  12513. if (currentCharCode === 61) {
  12514. next();
  12515. if (currentCharCode === 61) {
  12516. next();
  12517. return createToken(NOT_EQUAL_EQUAL, beginIndex);
  12518. }
  12519. return createToken(NOT_EQUAL, beginIndex);
  12520. }
  12521. return createToken(BANG, beginIndex);
  12522. case 42:
  12523. if (currentCharCode === 61) {
  12524. next();
  12525. return createToken(STAR_EQUAL, beginIndex);
  12526. }
  12527. if (currentCharCode === 42 && options.exponentiation) {
  12528. next();
  12529. if (currentCharCode === 61) {
  12530. next();
  12531. return createToken(STAR_STAR_EQUAL, beginIndex);
  12532. }
  12533. return createToken(STAR_STAR, beginIndex);
  12534. }
  12535. return createToken(STAR, beginIndex);
  12536. case 37:
  12537. if (currentCharCode === 61) {
  12538. next();
  12539. return createToken(PERCENT_EQUAL, beginIndex);
  12540. }
  12541. return createToken(PERCENT, beginIndex);
  12542. case 94:
  12543. if (currentCharCode === 61) {
  12544. next();
  12545. return createToken(CARET_EQUAL, beginIndex);
  12546. }
  12547. return createToken(CARET, beginIndex);
  12548. case 47:
  12549. if (currentCharCode === 61) {
  12550. next();
  12551. return createToken(SLASH_EQUAL, beginIndex);
  12552. }
  12553. return createToken(SLASH, beginIndex);
  12554. case 43:
  12555. switch (currentCharCode) {
  12556. case 43:
  12557. next();
  12558. return createToken(PLUS_PLUS, beginIndex);
  12559. case 61:
  12560. next();
  12561. return createToken(PLUS_EQUAL, beginIndex);
  12562. default:
  12563. return createToken(PLUS, beginIndex);
  12564. }
  12565. case 45:
  12566. switch (currentCharCode) {
  12567. case 45:
  12568. next();
  12569. return createToken(MINUS_MINUS, beginIndex);
  12570. case 61:
  12571. next();
  12572. return createToken(MINUS_EQUAL, beginIndex);
  12573. default:
  12574. return createToken(MINUS, beginIndex);
  12575. }
  12576. case 38:
  12577. switch (currentCharCode) {
  12578. case 38:
  12579. next();
  12580. return createToken(AND, beginIndex);
  12581. case 61:
  12582. next();
  12583. return createToken(AMPERSAND_EQUAL, beginIndex);
  12584. default:
  12585. return createToken(AMPERSAND, beginIndex);
  12586. }
  12587. case 124:
  12588. switch (currentCharCode) {
  12589. case 124:
  12590. next();
  12591. return createToken(OR, beginIndex);
  12592. case 61:
  12593. next();
  12594. return createToken(BAR_EQUAL, beginIndex);
  12595. default:
  12596. return createToken(BAR, beginIndex);
  12597. }
  12598. case 96:
  12599. return scanTemplateStart(beginIndex);
  12600. case 64:
  12601. return createToken(AT, beginIndex);
  12602. case 48:
  12603. return scanPostZero(beginIndex);
  12604. case 49:
  12605. case 50:
  12606. case 51:
  12607. case 52:
  12608. case 53:
  12609. case 54:
  12610. case 55:
  12611. case 56:
  12612. case 57:
  12613. return scanPostDigit(beginIndex);
  12614. case 34:
  12615. case 39:
  12616. return scanStringLiteral(beginIndex, code);
  12617. default:
  12618. return scanIdentifierOrKeyword(beginIndex, code);
  12619. }
  12620. }
  12621. function scanNumberPostPeriod(beginIndex) {
  12622. skipDecimalDigits();
  12623. return scanExponentOfNumericLiteral(beginIndex);
  12624. }
  12625. function scanPostDigit(beginIndex) {
  12626. skipDecimalDigits();
  12627. return scanFractionalNumericLiteral(beginIndex);
  12628. }
  12629. function scanPostZero(beginIndex) {
  12630. switch (currentCharCode) {
  12631. case 46:
  12632. return scanFractionalNumericLiteral(beginIndex);
  12633. case 88:
  12634. case 120:
  12635. next();
  12636. if (!isHexDigit(currentCharCode)) {
  12637. reportError('Hex Integer Literal must contain at least one digit', beginIndex);
  12638. }
  12639. skipHexDigits();
  12640. return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));
  12641. case 66:
  12642. case 98:
  12643. if (!options.numericLiterals)
  12644. break;
  12645. next();
  12646. if (!isBinaryDigit(currentCharCode)) {
  12647. reportError('Binary Integer Literal must contain at least one digit', beginIndex);
  12648. }
  12649. skipBinaryDigits();
  12650. return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));
  12651. case 79:
  12652. case 111:
  12653. if (!options.numericLiterals)
  12654. break;
  12655. next();
  12656. if (!isOctalDigit(currentCharCode)) {
  12657. reportError('Octal Integer Literal must contain at least one digit', beginIndex);
  12658. }
  12659. skipOctalDigits();
  12660. return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));
  12661. case 48:
  12662. case 49:
  12663. case 50:
  12664. case 51:
  12665. case 52:
  12666. case 53:
  12667. case 54:
  12668. case 55:
  12669. case 56:
  12670. case 57:
  12671. return scanPostDigit(beginIndex);
  12672. }
  12673. return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));
  12674. }
  12675. function createToken(type, beginIndex) {
  12676. return new Token(type, getTokenRange(beginIndex));
  12677. }
  12678. function readUnicodeEscapeSequence() {
  12679. var beginIndex = index;
  12680. if (currentCharCode === 117) {
  12681. next();
  12682. if (skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit()) {
  12683. return parseInt(getTokenString(beginIndex + 1), 16);
  12684. }
  12685. }
  12686. reportError('Invalid unicode escape sequence in identifier', beginIndex - 1);
  12687. return 0;
  12688. }
  12689. function scanIdentifierOrKeyword(beginIndex, code) {
  12690. var escapedCharCodes;
  12691. if (code === 92) {
  12692. code = readUnicodeEscapeSequence();
  12693. escapedCharCodes = [code];
  12694. }
  12695. if (!isIdentifierStart(code)) {
  12696. reportError(("Character code '" + code + "' is not a valid identifier start char"), beginIndex);
  12697. return createToken(ERROR, beginIndex);
  12698. }
  12699. for (; ; ) {
  12700. code = currentCharCode;
  12701. if (isIdentifierPart(code)) {
  12702. next();
  12703. } else if (code === 92) {
  12704. next();
  12705. code = readUnicodeEscapeSequence();
  12706. if (!escapedCharCodes)
  12707. escapedCharCodes = [];
  12708. escapedCharCodes.push(code);
  12709. if (!isIdentifierPart(code))
  12710. return createToken(ERROR, beginIndex);
  12711. } else {
  12712. break;
  12713. }
  12714. }
  12715. var value = input.slice(beginIndex, index);
  12716. var keywordType = getKeywordType(value);
  12717. if (keywordType)
  12718. return new KeywordToken(value, keywordType, getTokenRange(beginIndex));
  12719. if (escapedCharCodes) {
  12720. var i = 0;
  12721. value = value.replace(/\\u..../g, function(s) {
  12722. return String.fromCharCode(escapedCharCodes[i++]);
  12723. });
  12724. }
  12725. return new IdentifierToken(getTokenRange(beginIndex), value);
  12726. }
  12727. function scanStringLiteral(beginIndex, terminator) {
  12728. while (peekStringLiteralChar(terminator)) {
  12729. if (!skipStringLiteralChar()) {
  12730. return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));
  12731. }
  12732. }
  12733. if (currentCharCode !== terminator) {
  12734. reportError('Unterminated String Literal', beginIndex);
  12735. } else {
  12736. next();
  12737. }
  12738. return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex));
  12739. }
  12740. function getTokenString(beginIndex) {
  12741. return input.substring(beginIndex, index);
  12742. }
  12743. function peekStringLiteralChar(terminator) {
  12744. return !isAtEnd() && currentCharCode !== terminator && !isLineTerminator(currentCharCode);
  12745. }
  12746. function skipStringLiteralChar() {
  12747. if (currentCharCode === 92) {
  12748. return skipStringLiteralEscapeSequence();
  12749. }
  12750. next();
  12751. return true;
  12752. }
  12753. function skipStringLiteralEscapeSequence() {
  12754. next();
  12755. if (isAtEnd()) {
  12756. reportError('Unterminated string literal escape sequence');
  12757. return false;
  12758. }
  12759. if (isLineTerminator(currentCharCode)) {
  12760. skipLineTerminator();
  12761. return true;
  12762. }
  12763. var code = currentCharCode;
  12764. next();
  12765. switch (code) {
  12766. case 39:
  12767. case 34:
  12768. case 92:
  12769. case 98:
  12770. case 102:
  12771. case 110:
  12772. case 114:
  12773. case 116:
  12774. case 118:
  12775. case 48:
  12776. return true;
  12777. case 120:
  12778. return skipHexDigit() && skipHexDigit();
  12779. case 117:
  12780. return skipUnicodeEscapeSequence();
  12781. default:
  12782. return true;
  12783. }
  12784. }
  12785. function skipUnicodeEscapeSequence() {
  12786. if (currentCharCode === 123 && options.unicodeEscapeSequences) {
  12787. next();
  12788. var beginIndex = index;
  12789. if (!isHexDigit(currentCharCode)) {
  12790. reportError('Hex digit expected', beginIndex);
  12791. return false;
  12792. }
  12793. skipHexDigits();
  12794. if (currentCharCode !== 125) {
  12795. reportError('Hex digit expected', beginIndex);
  12796. return false;
  12797. }
  12798. var codePoint = getTokenString(beginIndex, index);
  12799. if (parseInt(codePoint, 16) > 0x10FFFF) {
  12800. reportError('The code point in a Unicode escape sequence cannot exceed 10FFFF', beginIndex);
  12801. return false;
  12802. }
  12803. next();
  12804. return true;
  12805. }
  12806. return skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit();
  12807. }
  12808. function skipHexDigit() {
  12809. if (!isHexDigit(currentCharCode)) {
  12810. reportError('Hex digit expected');
  12811. return false;
  12812. }
  12813. next();
  12814. return true;
  12815. }
  12816. function skipLineTerminator() {
  12817. var first = currentCharCode;
  12818. next();
  12819. if (first === 13 && currentCharCode === 10) {
  12820. next();
  12821. }
  12822. }
  12823. function scanFractionalNumericLiteral(beginIndex) {
  12824. if (currentCharCode === 46) {
  12825. next();
  12826. skipDecimalDigits();
  12827. }
  12828. return scanExponentOfNumericLiteral(beginIndex);
  12829. }
  12830. function scanExponentOfNumericLiteral(beginIndex) {
  12831. switch (currentCharCode) {
  12832. case 101:
  12833. case 69:
  12834. next();
  12835. switch (currentCharCode) {
  12836. case 43:
  12837. case 45:
  12838. next();
  12839. break;
  12840. }
  12841. if (!isDecimalDigit(currentCharCode)) {
  12842. reportError('Exponent part must contain at least one digit', beginIndex);
  12843. }
  12844. skipDecimalDigits();
  12845. break;
  12846. default:
  12847. break;
  12848. }
  12849. return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex));
  12850. }
  12851. function skipDecimalDigits() {
  12852. while (isDecimalDigit(currentCharCode)) {
  12853. next();
  12854. }
  12855. }
  12856. function skipHexDigits() {
  12857. while (isHexDigit(currentCharCode)) {
  12858. next();
  12859. }
  12860. }
  12861. function skipBinaryDigits() {
  12862. while (isBinaryDigit(currentCharCode)) {
  12863. next();
  12864. }
  12865. }
  12866. function skipOctalDigits() {
  12867. while (isOctalDigit(currentCharCode)) {
  12868. next();
  12869. }
  12870. }
  12871. function isAtEnd() {
  12872. return index === length;
  12873. }
  12874. function next() {
  12875. index++;
  12876. updateCurrentCharCode();
  12877. }
  12878. function updateCurrentCharCode() {
  12879. currentCharCode = input.charCodeAt(index);
  12880. }
  12881. function reportError(message) {
  12882. var startIndex = arguments[1] !== (void 0) ? arguments[1] : index;
  12883. var endIndex = arguments[2] !== (void 0) ? arguments[2] : index;
  12884. var start = getPositionByOffset(startIndex);
  12885. var end = getPositionByOffset(endIndex);
  12886. var location = new SourceRange(start, end);
  12887. errorReporter.reportError(location, message);
  12888. }
  12889. return {
  12890. get isWhitespace() {
  12891. return isWhitespace;
  12892. },
  12893. get isLineTerminator() {
  12894. return isLineTerminator;
  12895. },
  12896. get isIdentifierPart() {
  12897. return isIdentifierPart;
  12898. },
  12899. get init() {
  12900. return init;
  12901. },
  12902. get getLastToken() {
  12903. return getLastToken;
  12904. },
  12905. get nextRegularExpressionLiteralToken() {
  12906. return nextRegularExpressionLiteralToken;
  12907. },
  12908. get nextTemplateLiteralToken() {
  12909. return nextTemplateLiteralToken;
  12910. },
  12911. get setIndex() {
  12912. return setIndex;
  12913. },
  12914. get getPosition() {
  12915. return getPosition;
  12916. },
  12917. get nextCloseAngle() {
  12918. return nextCloseAngle;
  12919. },
  12920. get peekJsxToken() {
  12921. return peekJsxToken;
  12922. },
  12923. get nextJsxToken() {
  12924. return nextJsxToken;
  12925. },
  12926. get nextJsxTextToken() {
  12927. return nextJsxTextToken;
  12928. },
  12929. get nextToken() {
  12930. return nextToken;
  12931. },
  12932. get peekTokenNoLineTerminator() {
  12933. return peekTokenNoLineTerminator;
  12934. },
  12935. get peek() {
  12936. return peek;
  12937. },
  12938. get peekLookahead() {
  12939. return peekLookahead;
  12940. },
  12941. get peekToken() {
  12942. return peekToken;
  12943. },
  12944. get peekType() {
  12945. return peekType;
  12946. },
  12947. get peekLocation() {
  12948. return peekLocation;
  12949. },
  12950. get peekTokenLookahead() {
  12951. return peekTokenLookahead;
  12952. },
  12953. get isAtEnd() {
  12954. return isAtEnd;
  12955. }
  12956. };
  12957. });
  12958. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ConstructorValidator.js", [], function() {
  12959. "use strict";
  12960. var __moduleName = "traceur@0.0.112/src/semantics/ConstructorValidator.js";
  12961. var SUPER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ConstructorValidator.js")).SUPER_EXPRESSION;
  12962. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/FindVisitor.js", "traceur@0.0.112/src/semantics/ConstructorValidator.js")).FindVisitor;
  12963. var ConstructorValidator = function($__super) {
  12964. function ConstructorValidator(reporter) {
  12965. $traceurRuntime.superConstructor(ConstructorValidator).call(this);
  12966. this.reporter_ = reporter;
  12967. this.hasError = false;
  12968. }
  12969. return ($traceurRuntime.createClass)(ConstructorValidator, {
  12970. visitClassExpression: function(tree) {
  12971. this.visitAny(tree.superClass);
  12972. },
  12973. visitClassDeclaration: function(tree) {
  12974. this.visitAny(tree.superClass);
  12975. },
  12976. visitThisExpression: function(tree) {
  12977. this.reportError_(tree.location, 'this');
  12978. },
  12979. visitCallExpression: function(tree) {
  12980. if (tree.operand.type === SUPER_EXPRESSION) {
  12981. this.visitAny(tree.args);
  12982. this.found = true;
  12983. return;
  12984. }
  12985. $traceurRuntime.superGet(this, ConstructorValidator.prototype, "visitCallExpression").call(this, tree);
  12986. },
  12987. visitSuperExpression: function(tree) {
  12988. this.reportError_(tree.location, 'super property');
  12989. },
  12990. reportError_: function(location, kind) {
  12991. this.reporter_.reportError(location, ("'" + kind + "' is not allowed before super()"));
  12992. this.hasError = true;
  12993. this.found = true;
  12994. }
  12995. }, {}, $__super);
  12996. }(FindVisitor);
  12997. function validateConstructor(tree, reporter) {
  12998. var visitor = new ConstructorValidator(reporter);
  12999. visitor.visitAny(tree);
  13000. if (visitor.hasError)
  13001. return false;
  13002. if (visitor.found)
  13003. return true;
  13004. reporter.reportError(tree.location, 'Derived constructor must call super()');
  13005. return false;
  13006. }
  13007. return {get validateConstructor() {
  13008. return validateConstructor;
  13009. }};
  13010. });
  13011. $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/validateParameters.js", [], function() {
  13012. "use strict";
  13013. var __moduleName = "traceur@0.0.112/src/staticsemantics/validateParameters.js";
  13014. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).ParseTreeVisitor;
  13015. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).StringSet;
  13016. var isStrictKeyword = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Keywords.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).isStrictKeyword;
  13017. var ParameterValidationVisitor = function($__super) {
  13018. function ParameterValidationVisitor(isStrict, reporter) {
  13019. $traceurRuntime.superConstructor(ParameterValidationVisitor).call(this);
  13020. this.reporter_ = reporter;
  13021. this.names_ = new StringSet();
  13022. this.errors_ = [];
  13023. this.reportStrictKeywords_ = isStrict;
  13024. this.reportDuplicates_ = isStrict;
  13025. }
  13026. return ($traceurRuntime.createClass)(ParameterValidationVisitor, {
  13027. visitBindingIdentifier: function(tree) {
  13028. var name = tree.identifierToken.toString();
  13029. if (this.reportStrictKeywords_ && (isStrictKeyword(name) || name === 'eval' || name === 'arguments')) {
  13030. this.reporter_.reportError(tree.location, (name + " is a reserved identifier"));
  13031. }
  13032. if (this.names_.has(name)) {
  13033. this.maybeReportDuplicateError_(name, tree.location);
  13034. }
  13035. this.names_.add(name);
  13036. },
  13037. visitBindingElement: function(tree) {
  13038. if (tree.initializer !== null) {
  13039. this.reportEarlierErrors_();
  13040. }
  13041. this.visitAny(tree.binding);
  13042. },
  13043. visitRestParameter: function(tree) {
  13044. this.reportEarlierErrors_();
  13045. this.visitAny(tree.identifier);
  13046. },
  13047. visitFormalParameter: function(tree) {
  13048. this.visitAny(tree.parameter);
  13049. },
  13050. visitArrayPattern: function(tree) {
  13051. this.reportEarlierErrors_();
  13052. $traceurRuntime.superGet(this, ParameterValidationVisitor.prototype, "visitArrayPattern").call(this, tree);
  13053. },
  13054. visitObjectPattern: function(tree) {
  13055. this.reportEarlierErrors_();
  13056. $traceurRuntime.superGet(this, ParameterValidationVisitor.prototype, "visitObjectPattern").call(this, tree);
  13057. },
  13058. reportDuplicateError_: function(name, location) {
  13059. this.reporter_.reportError(location, ("Duplicate parameter name " + name));
  13060. },
  13061. maybeReportDuplicateError_: function(name, location) {
  13062. if (this.reportDuplicates_) {
  13063. this.reportDuplicateError_(name, location);
  13064. } else {
  13065. this.errors_.push(name, location);
  13066. }
  13067. },
  13068. reportEarlierErrors_: function() {
  13069. if (!this.reportDuplicates_) {
  13070. this.reportDuplicates_ = true;
  13071. for (var i = 0; i < this.errors_.length; i += 2) {
  13072. var name = this.errors_[i];
  13073. var location = this.errors_[i + 1];
  13074. this.reportDuplicateError_(name, location);
  13075. }
  13076. }
  13077. }
  13078. }, {}, $__super);
  13079. }(ParseTreeVisitor);
  13080. var $__default = function(tree, isStrict, reporter) {
  13081. new ParameterValidationVisitor(isStrict, reporter).visitAny(tree);
  13082. };
  13083. return {get default() {
  13084. return $__default;
  13085. }};
  13086. });
  13087. $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js", [], function() {
  13088. "use strict";
  13089. var __moduleName = "traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js";
  13090. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js")),
  13091. IDENTIFIER_EXPRESSION = $__1.IDENTIFIER_EXPRESSION,
  13092. MEMBER_EXPRESSION = $__1.MEMBER_EXPRESSION,
  13093. MEMBER_LOOKUP_EXPRESSION = $__1.MEMBER_LOOKUP_EXPRESSION,
  13094. PAREN_EXPRESSION = $__1.PAREN_EXPRESSION;
  13095. function isValidSimpleAssignmentTarget(tree, isStrict) {
  13096. switch (tree.type) {
  13097. case IDENTIFIER_EXPRESSION:
  13098. {
  13099. if (!isStrict)
  13100. return true;
  13101. var value = tree.identifierToken.value;
  13102. return value !== 'arguments' && value !== 'eval';
  13103. }
  13104. case PAREN_EXPRESSION:
  13105. return isValidSimpleAssignmentTarget(tree.expression, isStrict);
  13106. case MEMBER_EXPRESSION:
  13107. case MEMBER_LOOKUP_EXPRESSION:
  13108. return true;
  13109. default:
  13110. return false;
  13111. }
  13112. }
  13113. return {get default() {
  13114. return isValidSimpleAssignmentTarget;
  13115. }};
  13116. });
  13117. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Parser.js", [], function() {
  13118. "use strict";
  13119. var __moduleName = "traceur@0.0.112/src/syntax/Parser.js";
  13120. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/FindVisitor.js", "traceur@0.0.112/src/syntax/Parser.js")).FindVisitor;
  13121. var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./IdentifierToken.js", "traceur@0.0.112/src/syntax/Parser.js")).IdentifierToken;
  13122. var $__25 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTreeType.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13123. ARRAY_LITERAL = $__25.ARRAY_LITERAL,
  13124. BINDING_IDENTIFIER = $__25.BINDING_IDENTIFIER,
  13125. CALL_EXPRESSION = $__25.CALL_EXPRESSION,
  13126. COMPUTED_PROPERTY_NAME = $__25.COMPUTED_PROPERTY_NAME,
  13127. COVER_FORMALS = $__25.COVER_FORMALS,
  13128. FORMAL_PARAMETER_LIST = $__25.FORMAL_PARAMETER_LIST,
  13129. IDENTIFIER_EXPRESSION = $__25.IDENTIFIER_EXPRESSION,
  13130. LITERAL_PROPERTY_NAME = $__25.LITERAL_PROPERTY_NAME,
  13131. OBJECT_LITERAL = $__25.OBJECT_LITERAL,
  13132. REST_PARAMETER = $__25.REST_PARAMETER,
  13133. SYNTAX_ERROR_TREE = $__25.SYNTAX_ERROR_TREE;
  13134. var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/syntax/Parser.js")).Options;
  13135. var $__27 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PredefinedName.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13136. AS = $__27.AS,
  13137. ASYNC = $__27.ASYNC,
  13138. ASYNC_STAR = $__27.ASYNC_STAR,
  13139. AWAIT = $__27.AWAIT,
  13140. CONSTRUCTOR = $__27.CONSTRUCTOR,
  13141. FROM = $__27.FROM,
  13142. GET = $__27.GET,
  13143. OF = $__27.OF,
  13144. ON = $__27.ON,
  13145. SET = $__27.SET,
  13146. TYPE = $__27.TYPE;
  13147. var SyntaxErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SyntaxErrorReporter.js", "traceur@0.0.112/src/syntax/Parser.js")).SyntaxErrorReporter;
  13148. var $__29 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scanner.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13149. getLastToken = $__29.getLastToken,
  13150. getPosition = $__29.getPosition,
  13151. initScanner = $__29.init,
  13152. isAtEnd = $__29.isAtEnd,
  13153. nextCloseAngle = $__29.nextCloseAngle,
  13154. nextJsxTextToken = $__29.nextJsxTextToken,
  13155. nextJsxToken = $__29.nextJsxToken,
  13156. nextRegularExpressionLiteralToken = $__29.nextRegularExpressionLiteralToken,
  13157. nextTemplateLiteralToken = $__29.nextTemplateLiteralToken,
  13158. nextToken = $__29.nextToken,
  13159. peek = $__29.peek,
  13160. peekJsxToken = $__29.peekJsxToken,
  13161. peekLocation = $__29.peekLocation,
  13162. peekLookahead = $__29.peekLookahead,
  13163. peekToken = $__29.peekToken,
  13164. peekTokenLookahead = $__29.peekTokenLookahead,
  13165. peekTokenNoLineTerminator = $__29.peekTokenNoLineTerminator,
  13166. peekType = $__29.peekType,
  13167. resetScanner = $__29.setIndex;
  13168. var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/Parser.js")).SourceRange;
  13169. var $__31 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13170. Token = $__31.Token,
  13171. isAssignmentOperator = $__31.isAssignmentOperator;
  13172. var getKeywordType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/Parser.js")).getKeywordType;
  13173. var validateConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ConstructorValidator.js", "traceur@0.0.112/src/syntax/Parser.js")).validateConstructor;
  13174. var validateParameters = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/validateParameters.js", "traceur@0.0.112/src/syntax/Parser.js")).default;
  13175. var isValidSimpleAssignmentTarget = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/isValidSimpleAssignmentTarget.js", "traceur@0.0.112/src/syntax/Parser.js")).default;
  13176. var $__36 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13177. AMPERSAND = $__36.AMPERSAND,
  13178. AND = $__36.AND,
  13179. ARROW = $__36.ARROW,
  13180. AT = $__36.AT,
  13181. BANG = $__36.BANG,
  13182. BAR = $__36.BAR,
  13183. BREAK = $__36.BREAK,
  13184. CARET = $__36.CARET,
  13185. CASE = $__36.CASE,
  13186. CATCH = $__36.CATCH,
  13187. CLASS = $__36.CLASS,
  13188. CLOSE_ANGLE = $__36.CLOSE_ANGLE,
  13189. CLOSE_CURLY = $__36.CLOSE_CURLY,
  13190. CLOSE_PAREN = $__36.CLOSE_PAREN,
  13191. CLOSE_SQUARE = $__36.CLOSE_SQUARE,
  13192. COLON = $__36.COLON,
  13193. COMMA = $__36.COMMA,
  13194. CONST = $__36.CONST,
  13195. CONTINUE = $__36.CONTINUE,
  13196. DEBUGGER = $__36.DEBUGGER,
  13197. DEFAULT = $__36.DEFAULT,
  13198. DELETE = $__36.DELETE,
  13199. DO = $__36.DO,
  13200. DOT_DOT_DOT = $__36.DOT_DOT_DOT,
  13201. ELSE = $__36.ELSE,
  13202. END_OF_FILE = $__36.END_OF_FILE,
  13203. EQUAL = $__36.EQUAL,
  13204. EQUAL_EQUAL = $__36.EQUAL_EQUAL,
  13205. EQUAL_EQUAL_EQUAL = $__36.EQUAL_EQUAL_EQUAL,
  13206. ERROR = $__36.ERROR,
  13207. EXPORT = $__36.EXPORT,
  13208. EXTENDS = $__36.EXTENDS,
  13209. FALSE = $__36.FALSE,
  13210. FINALLY = $__36.FINALLY,
  13211. FOR = $__36.FOR,
  13212. FUNCTION = $__36.FUNCTION,
  13213. GREATER_EQUAL = $__36.GREATER_EQUAL,
  13214. IDENTIFIER = $__36.IDENTIFIER,
  13215. IF = $__36.IF,
  13216. IMPLEMENTS = $__36.IMPLEMENTS,
  13217. IMPORT = $__36.IMPORT,
  13218. IN = $__36.IN,
  13219. INSTANCEOF = $__36.INSTANCEOF,
  13220. INTERFACE = $__36.INTERFACE,
  13221. JSX_IDENTIFIER = $__36.JSX_IDENTIFIER,
  13222. LEFT_SHIFT = $__36.LEFT_SHIFT,
  13223. LESS_EQUAL = $__36.LESS_EQUAL,
  13224. LET = $__36.LET,
  13225. MINUS = $__36.MINUS,
  13226. MINUS_MINUS = $__36.MINUS_MINUS,
  13227. NEW = $__36.NEW,
  13228. NO_SUBSTITUTION_TEMPLATE = $__36.NO_SUBSTITUTION_TEMPLATE,
  13229. NOT_EQUAL = $__36.NOT_EQUAL,
  13230. NOT_EQUAL_EQUAL = $__36.NOT_EQUAL_EQUAL,
  13231. NULL = $__36.NULL,
  13232. NUMBER = $__36.NUMBER,
  13233. OPEN_ANGLE = $__36.OPEN_ANGLE,
  13234. OPEN_CURLY = $__36.OPEN_CURLY,
  13235. OPEN_PAREN = $__36.OPEN_PAREN,
  13236. OPEN_SQUARE = $__36.OPEN_SQUARE,
  13237. OR = $__36.OR,
  13238. PACKAGE = $__36.PACKAGE,
  13239. PERCENT = $__36.PERCENT,
  13240. PERIOD = $__36.PERIOD,
  13241. PLUS = $__36.PLUS,
  13242. PLUS_PLUS = $__36.PLUS_PLUS,
  13243. PRIVATE = $__36.PRIVATE,
  13244. PROTECTED = $__36.PROTECTED,
  13245. PUBLIC = $__36.PUBLIC,
  13246. QUESTION = $__36.QUESTION,
  13247. RETURN = $__36.RETURN,
  13248. RIGHT_SHIFT = $__36.RIGHT_SHIFT,
  13249. SEMI_COLON = $__36.SEMI_COLON,
  13250. SLASH = $__36.SLASH,
  13251. SLASH_EQUAL = $__36.SLASH_EQUAL,
  13252. STAR = $__36.STAR,
  13253. STAR_STAR = $__36.STAR_STAR,
  13254. STATIC = $__36.STATIC,
  13255. STRING = $__36.STRING,
  13256. SUPER = $__36.SUPER,
  13257. SWITCH = $__36.SWITCH,
  13258. TEMPLATE_HEAD = $__36.TEMPLATE_HEAD,
  13259. TEMPLATE_TAIL = $__36.TEMPLATE_TAIL,
  13260. THIS = $__36.THIS,
  13261. THROW = $__36.THROW,
  13262. TILDE = $__36.TILDE,
  13263. TRUE = $__36.TRUE,
  13264. TRY = $__36.TRY,
  13265. TYPEOF = $__36.TYPEOF,
  13266. UNSIGNED_RIGHT_SHIFT = $__36.UNSIGNED_RIGHT_SHIFT,
  13267. VAR = $__36.VAR,
  13268. VOID = $__36.VOID,
  13269. WHILE = $__36.WHILE,
  13270. WITH = $__36.WITH,
  13271. YIELD = $__36.YIELD;
  13272. var $__37 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTrees.js", "traceur@0.0.112/src/syntax/Parser.js")),
  13273. ArgumentList = $__37.ArgumentList,
  13274. ArrayComprehension = $__37.ArrayComprehension,
  13275. ArrayLiteral = $__37.ArrayLiteral,
  13276. ArrayPattern = $__37.ArrayPattern,
  13277. ArrayType = $__37.ArrayType,
  13278. ArrowFunction = $__37.ArrowFunction,
  13279. AssignmentElement = $__37.AssignmentElement,
  13280. AwaitExpression = $__37.AwaitExpression,
  13281. BinaryExpression = $__37.BinaryExpression,
  13282. BindingElement = $__37.BindingElement,
  13283. BindingIdentifier = $__37.BindingIdentifier,
  13284. Block = $__37.Block,
  13285. BreakStatement = $__37.BreakStatement,
  13286. CallExpression = $__37.CallExpression,
  13287. CallSignature = $__37.CallSignature,
  13288. CaseClause = $__37.CaseClause,
  13289. Catch = $__37.Catch,
  13290. ClassDeclaration = $__37.ClassDeclaration,
  13291. ClassExpression = $__37.ClassExpression,
  13292. CommaExpression = $__37.CommaExpression,
  13293. ComprehensionFor = $__37.ComprehensionFor,
  13294. ComprehensionIf = $__37.ComprehensionIf,
  13295. ComputedPropertyName = $__37.ComputedPropertyName,
  13296. ConditionalExpression = $__37.ConditionalExpression,
  13297. ConstructSignature = $__37.ConstructSignature,
  13298. ConstructorType = $__37.ConstructorType,
  13299. ContinueStatement = $__37.ContinueStatement,
  13300. CoverFormals = $__37.CoverFormals,
  13301. CoverInitializedName = $__37.CoverInitializedName,
  13302. DebuggerStatement = $__37.DebuggerStatement,
  13303. Annotation = $__37.Annotation,
  13304. DefaultClause = $__37.DefaultClause,
  13305. DoWhileStatement = $__37.DoWhileStatement,
  13306. EmptyStatement = $__37.EmptyStatement,
  13307. ExportDeclaration = $__37.ExportDeclaration,
  13308. ExportDefault = $__37.ExportDefault,
  13309. ExportSpecifier = $__37.ExportSpecifier,
  13310. ExportSpecifierSet = $__37.ExportSpecifierSet,
  13311. ExportStar = $__37.ExportStar,
  13312. ExpressionStatement = $__37.ExpressionStatement,
  13313. Finally = $__37.Finally,
  13314. ForInStatement = $__37.ForInStatement,
  13315. ForOfStatement = $__37.ForOfStatement,
  13316. ForOnStatement = $__37.ForOnStatement,
  13317. ForStatement = $__37.ForStatement,
  13318. FormalParameter = $__37.FormalParameter,
  13319. FormalParameterList = $__37.FormalParameterList,
  13320. ForwardDefaultExport = $__37.ForwardDefaultExport,
  13321. FunctionBody = $__37.FunctionBody,
  13322. FunctionDeclaration = $__37.FunctionDeclaration,
  13323. FunctionExpression = $__37.FunctionExpression,
  13324. FunctionType = $__37.FunctionType,
  13325. GeneratorComprehension = $__37.GeneratorComprehension,
  13326. GetAccessor = $__37.GetAccessor,
  13327. IdentifierExpression = $__37.IdentifierExpression,
  13328. IfStatement = $__37.IfStatement,
  13329. ImportClausePair = $__37.ImportClausePair,
  13330. ImportDeclaration = $__37.ImportDeclaration,
  13331. ImportSpecifier = $__37.ImportSpecifier,
  13332. ImportSpecifierSet = $__37.ImportSpecifierSet,
  13333. ImportedBinding = $__37.ImportedBinding,
  13334. ImportTypeClause = $__37.ImportTypeClause,
  13335. IndexSignature = $__37.IndexSignature,
  13336. InterfaceDeclaration = $__37.InterfaceDeclaration,
  13337. JsxAttribute = $__37.JsxAttribute,
  13338. JsxElement = $__37.JsxElement,
  13339. JsxElementName = $__37.JsxElementName,
  13340. JsxPlaceholder = $__37.JsxPlaceholder,
  13341. JsxSpreadAttribute = $__37.JsxSpreadAttribute,
  13342. JsxText = $__37.JsxText,
  13343. LabelledStatement = $__37.LabelledStatement,
  13344. LiteralExpression = $__37.LiteralExpression,
  13345. LiteralPropertyName = $__37.LiteralPropertyName,
  13346. MemberExpression = $__37.MemberExpression,
  13347. MemberLookupExpression = $__37.MemberLookupExpression,
  13348. Method = $__37.Method,
  13349. MethodSignature = $__37.MethodSignature,
  13350. Module = $__37.Module,
  13351. ModuleSpecifier = $__37.ModuleSpecifier,
  13352. NameSpaceExport = $__37.NameSpaceExport,
  13353. NameSpaceImport = $__37.NameSpaceImport,
  13354. NamedExport = $__37.NamedExport,
  13355. NewExpression = $__37.NewExpression,
  13356. ObjectLiteral = $__37.ObjectLiteral,
  13357. ObjectPattern = $__37.ObjectPattern,
  13358. ObjectPatternField = $__37.ObjectPatternField,
  13359. ObjectType = $__37.ObjectType,
  13360. ParenExpression = $__37.ParenExpression,
  13361. PostfixExpression = $__37.PostfixExpression,
  13362. PredefinedType = $__37.PredefinedType,
  13363. PropertyNameAssignment = $__37.PropertyNameAssignment,
  13364. PropertyNameShorthand = $__37.PropertyNameShorthand,
  13365. PropertySignature = $__37.PropertySignature,
  13366. PropertyVariableDeclaration = $__37.PropertyVariableDeclaration,
  13367. RestParameter = $__37.RestParameter,
  13368. ReturnStatement = $__37.ReturnStatement,
  13369. Script = $__37.Script,
  13370. SetAccessor = $__37.SetAccessor,
  13371. SpreadExpression = $__37.SpreadExpression,
  13372. SpreadPatternElement = $__37.SpreadPatternElement,
  13373. SuperExpression = $__37.SuperExpression,
  13374. SwitchStatement = $__37.SwitchStatement,
  13375. SyntaxErrorTree = $__37.SyntaxErrorTree,
  13376. TemplateLiteralExpression = $__37.TemplateLiteralExpression,
  13377. TemplateLiteralPortion = $__37.TemplateLiteralPortion,
  13378. TemplateSubstitution = $__37.TemplateSubstitution,
  13379. ThisExpression = $__37.ThisExpression,
  13380. ThrowStatement = $__37.ThrowStatement,
  13381. TryStatement = $__37.TryStatement,
  13382. TypeAliasDeclaration = $__37.TypeAliasDeclaration,
  13383. TypeArguments = $__37.TypeArguments,
  13384. TypeName = $__37.TypeName,
  13385. TypeParameter = $__37.TypeParameter,
  13386. TypeParameters = $__37.TypeParameters,
  13387. TypeReference = $__37.TypeReference,
  13388. UnaryExpression = $__37.UnaryExpression,
  13389. UnionType = $__37.UnionType,
  13390. VariableDeclaration = $__37.VariableDeclaration,
  13391. VariableDeclarationList = $__37.VariableDeclarationList,
  13392. VariableStatement = $__37.VariableStatement,
  13393. WhileStatement = $__37.WhileStatement,
  13394. WithStatement = $__37.WithStatement,
  13395. YieldExpression = $__37.YieldExpression;
  13396. var ALLOW_IN = true;
  13397. var NO_IN = false;
  13398. var INITIALIZER_REQUIRED = true;
  13399. var INITIALIZER_OPTIONAL = false;
  13400. var ValidateObjectLiteral = function($__super) {
  13401. function ValidateObjectLiteral() {
  13402. $traceurRuntime.superConstructor(ValidateObjectLiteral).call(this);
  13403. this.errorToken = null;
  13404. }
  13405. return ($traceurRuntime.createClass)(ValidateObjectLiteral, {visitCoverInitializedName: function(tree) {
  13406. this.errorToken = tree.equalToken;
  13407. this.found = true;
  13408. }}, {}, $__super);
  13409. }(FindVisitor);
  13410. function containsInitializer(declarations) {
  13411. return declarations.some(function(v) {
  13412. return v.initializer;
  13413. });
  13414. }
  13415. var FUNCTION_STATE_SCRIPT = 1;
  13416. var FUNCTION_STATE_MODULE = 1 << 1;
  13417. var FUNCTION_STATE_FUNCTION = 1 << 2;
  13418. var FUNCTION_STATE_ARROW = 1 << 3;
  13419. var FUNCTION_STATE_METHOD = 1 << 4;
  13420. var FUNCTION_STATE_DERIVED_CONSTRUCTOR = 1 << 5;
  13421. var FUNCTION_STATE_GENERATOR = 1 << 6;
  13422. var FUNCTION_STATE_ASYNC = 1 << 7;
  13423. var FUNCTION_STATE_LENIENT = FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR | FUNCTION_STATE_ASYNC | FUNCTION_STATE_DERIVED_CONSTRUCTOR;
  13424. var FunctionState = function() {
  13425. function FunctionState(outer, kind) {
  13426. this.outer = outer;
  13427. this.kind = kind;
  13428. }
  13429. return ($traceurRuntime.createClass)(FunctionState, {
  13430. isTopMost: function() {
  13431. return this.kind & (FUNCTION_STATE_SCRIPT | FUNCTION_STATE_MODULE);
  13432. },
  13433. isMethod: function() {
  13434. return this.kind & FUNCTION_STATE_METHOD;
  13435. },
  13436. isDerivedConstructor: function() {
  13437. return this.kind & FUNCTION_STATE_DERIVED_CONSTRUCTOR;
  13438. },
  13439. isArrowFunction: function() {
  13440. return this.kind & FUNCTION_STATE_ARROW;
  13441. },
  13442. isGenerator: function() {
  13443. return this.kind & FUNCTION_STATE_GENERATOR;
  13444. },
  13445. isAsyncFunction: function() {
  13446. return this.kind & FUNCTION_STATE_ASYNC;
  13447. },
  13448. isAsyncGenerator: function() {
  13449. return this.isGenerator() && this.isAsyncFunction();
  13450. }
  13451. }, {});
  13452. }();
  13453. var Parser = function() {
  13454. function Parser(file) {
  13455. var errorReporter = arguments[1] !== (void 0) ? arguments[1] : new SyntaxErrorReporter();
  13456. var options = arguments[2] !== (void 0) ? arguments[2] : new Options();
  13457. this.errorReporter_ = errorReporter;
  13458. initScanner(errorReporter, file, this, options);
  13459. this.options_ = options;
  13460. this.coverInitializedNameCount_ = 0;
  13461. this.strictMode_ = false;
  13462. this.annotations_ = [];
  13463. this.functionState_ = null;
  13464. }
  13465. return ($traceurRuntime.createClass)(Parser, {
  13466. get allowYield_() {
  13467. return this.functionState_.isGenerator();
  13468. },
  13469. get allowAwait_() {
  13470. return this.functionState_.isAsyncFunction();
  13471. },
  13472. get allowForOn_() {
  13473. return this.functionState_.isAsyncFunction();
  13474. },
  13475. parseScript: function() {
  13476. this.strictMode_ = false;
  13477. var start = this.getTreeStartLocation_();
  13478. var fs = this.pushFunctionState_(FUNCTION_STATE_SCRIPT);
  13479. var scriptItemList = this.parseStatementList_(true);
  13480. this.eat_(END_OF_FILE);
  13481. this.popFunctionState_(fs);
  13482. return new Script(this.getTreeLocation_(start), scriptItemList, null);
  13483. },
  13484. pushFunctionState_: function(kind) {
  13485. return this.functionState_ = new FunctionState(this.functionState_, kind);
  13486. },
  13487. popFunctionState_: function(fs) {
  13488. if (fs != this.functionState_) {
  13489. throw new Error('Internal error');
  13490. }
  13491. this.functionState_ = this.functionState_.outer;
  13492. },
  13493. parseStatementList_: function(checkUseStrictDirective) {
  13494. var result = [];
  13495. var type;
  13496. while ((type = peekType()) !== CLOSE_CURLY && type !== END_OF_FILE) {
  13497. var statement = this.parseStatementListItem_(type);
  13498. if (checkUseStrictDirective) {
  13499. if (!statement.isDirectivePrologue()) {
  13500. checkUseStrictDirective = false;
  13501. } else if (statement.isUseStrictDirective()) {
  13502. this.strictMode_ = true;
  13503. checkUseStrictDirective = false;
  13504. }
  13505. }
  13506. result.push(statement);
  13507. }
  13508. return result;
  13509. },
  13510. parseStatementListItem_: function(type) {
  13511. switch (type) {
  13512. case LET:
  13513. case CONST:
  13514. if (this.options_.blockBinding) {
  13515. return this.parseVariableStatement_();
  13516. }
  13517. break;
  13518. case CLASS:
  13519. if (this.options_.classes) {
  13520. return this.parseClassDeclaration_();
  13521. }
  13522. break;
  13523. case FUNCTION:
  13524. return this.parseFunctionDeclaration_();
  13525. case IDENTIFIER:
  13526. if (this.options_.types && this.peekPredefinedString_(TYPE) && peekLookahead(IDENTIFIER)) {
  13527. return this.parseTypeAliasDeclaration_();
  13528. }
  13529. break;
  13530. }
  13531. return this.parseStatementWithType_(type);
  13532. },
  13533. parseModule: function() {
  13534. var start = this.getTreeStartLocation_();
  13535. var fs = this.pushFunctionState_(FUNCTION_STATE_MODULE);
  13536. var scriptItemList = this.parseModuleItemList_();
  13537. this.eat_(END_OF_FILE);
  13538. this.popFunctionState_(fs);
  13539. return new Module(this.getTreeLocation_(start), scriptItemList, null);
  13540. },
  13541. parseModuleItemList_: function() {
  13542. this.strictMode_ = true;
  13543. var result = [];
  13544. var type;
  13545. while ((type = peekType()) !== END_OF_FILE) {
  13546. var statement = this.parseModuleItem_(type);
  13547. result.push(statement);
  13548. }
  13549. return result;
  13550. },
  13551. parseModuleItem_: function(type) {
  13552. switch (type) {
  13553. case IMPORT:
  13554. return this.parseImportDeclaration_();
  13555. case EXPORT:
  13556. return this.parseExportDeclaration_();
  13557. case AT:
  13558. if (this.options_.annotations)
  13559. return this.parseAnnotatedDeclarations_(true);
  13560. break;
  13561. }
  13562. return this.parseStatementListItem_(type);
  13563. },
  13564. parseModuleSpecifier_: function() {
  13565. var start = this.getTreeStartLocation_();
  13566. var token = this.eat_(STRING);
  13567. return new ModuleSpecifier(this.getTreeLocation_(start), token);
  13568. },
  13569. parseNameSpaceImport_: function() {
  13570. var start = this.getTreeStartLocation_();
  13571. this.eat_(STAR);
  13572. this.eatId_(AS);
  13573. var binding = this.parseImportedBinding_();
  13574. return new NameSpaceImport(this.getTreeLocation_(start), binding);
  13575. },
  13576. parseImportDeclaration_: function() {
  13577. var start = this.getTreeStartLocation_();
  13578. this.eat_(IMPORT);
  13579. var importClause = null;
  13580. if (!peek(STRING)) {
  13581. importClause = this.parseImportClause_(true, this.options_.types);
  13582. this.eatId_(FROM);
  13583. }
  13584. var moduleSpecifier = this.parseModuleSpecifier_();
  13585. this.eatPossibleImplicitSemiColon_();
  13586. return new ImportDeclaration(this.getTreeLocation_(start), importClause, moduleSpecifier);
  13587. },
  13588. parseImportClause_: function(allowImportedDefaultBinding, allowType) {
  13589. switch (peekType()) {
  13590. case STAR:
  13591. return this.parseNameSpaceImport_();
  13592. case OPEN_CURLY:
  13593. return this.parseImportSpecifierSet_();
  13594. case IDENTIFIER:
  13595. if (allowType && this.peekPredefinedString_(TYPE)) {
  13596. var start = this.getTreeStartLocation_();
  13597. var t = peekTokenLookahead();
  13598. if (t.type === OPEN_CURLY || t.type === IDENTIFIER && t.value !== FROM) {
  13599. this.eatId_(TYPE);
  13600. var clause = this.parseImportClause_(allowImportedDefaultBinding, false);
  13601. return new ImportTypeClause(this.getTreeLocation_(start), clause);
  13602. }
  13603. }
  13604. if (allowImportedDefaultBinding) {
  13605. var start$__4 = this.getTreeStartLocation_();
  13606. var importedBinding = this.parseImportedBinding_();
  13607. if (this.eatIf_(COMMA)) {
  13608. var second = this.parseImportClause_(false, false);
  13609. return new ImportClausePair(this.getTreeLocation_(start$__4), importedBinding, second);
  13610. }
  13611. return importedBinding;
  13612. }
  13613. break;
  13614. }
  13615. return this.parseUnexpectedToken_();
  13616. },
  13617. parseImportSpecifierSet_: function() {
  13618. var start = this.getTreeStartLocation_();
  13619. var specifiers = [];
  13620. this.eat_(OPEN_CURLY);
  13621. while (!peek(CLOSE_CURLY) && !isAtEnd()) {
  13622. specifiers.push(this.parseImportSpecifier_());
  13623. if (!this.eatIf_(COMMA))
  13624. break;
  13625. }
  13626. this.eat_(CLOSE_CURLY);
  13627. return new ImportSpecifierSet(this.getTreeLocation_(start), specifiers);
  13628. },
  13629. parseImportedBinding_: function() {
  13630. var start = this.getTreeStartLocation_();
  13631. var binding = this.parseBindingIdentifier_();
  13632. return new ImportedBinding(this.getTreeLocation_(start), binding);
  13633. },
  13634. parseImportSpecifier_: function() {
  13635. var start = this.getTreeStartLocation_();
  13636. var token = peekToken();
  13637. var isKeyword = token.isKeyword();
  13638. var binding;
  13639. var name = this.eatIdName_();
  13640. if (isKeyword || this.peekPredefinedString_(AS)) {
  13641. this.eatId_(AS);
  13642. binding = this.parseImportedBinding_();
  13643. } else {
  13644. binding = new ImportedBinding(name.location, new BindingIdentifier(name.location, name));
  13645. name = null;
  13646. }
  13647. return new ImportSpecifier(this.getTreeLocation_(start), binding, name);
  13648. },
  13649. parseExportDeclaration_: function() {
  13650. var start = this.getTreeStartLocation_();
  13651. this.eat_(EXPORT);
  13652. var exportTree;
  13653. var annotations = this.popAnnotations_();
  13654. var type = peekType();
  13655. switch (type) {
  13656. case CONST:
  13657. case LET:
  13658. if (this.options_.blockBinding) {
  13659. exportTree = this.parseVariableStatement_();
  13660. break;
  13661. }
  13662. return this.parseUnexpectedToken_();
  13663. case VAR:
  13664. exportTree = this.parseVariableStatement_();
  13665. break;
  13666. case FUNCTION:
  13667. exportTree = this.parseFunctionDeclaration_();
  13668. break;
  13669. case CLASS:
  13670. exportTree = this.parseClassDeclaration_();
  13671. break;
  13672. case DEFAULT:
  13673. exportTree = this.parseExportDefault_();
  13674. break;
  13675. case OPEN_CURLY:
  13676. case STAR:
  13677. exportTree = this.parseNamedExport_();
  13678. break;
  13679. case IDENTIFIER:
  13680. if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) {
  13681. var asyncToken = this.eatId_();
  13682. exportTree = this.parseAsyncFunctionDeclaration_(asyncToken);
  13683. } else if (this.options_.types && this.peekPredefinedString_(TYPE) && peekLookahead(IDENTIFIER)) {
  13684. exportTree = this.parseTypeAliasDeclaration_();
  13685. } else if (this.options_.exportFromExtended) {
  13686. exportTree = this.parseNamedExport_();
  13687. } else {
  13688. return this.parseUnexpectedToken_();
  13689. }
  13690. break;
  13691. default:
  13692. {
  13693. var token = peekToken();
  13694. if (!token.isKeyword()) {
  13695. return this.parseUnexpectedToken_();
  13696. }
  13697. exportTree = this.parseNamedExport_();
  13698. }
  13699. }
  13700. return new ExportDeclaration(this.getTreeLocation_(start), exportTree, annotations);
  13701. },
  13702. parseExportDefault_: function() {
  13703. var start = this.getTreeStartLocation_();
  13704. var defaultToken = this.eat_(DEFAULT);
  13705. if (this.options_.exportFromExtended && this.peekPredefinedString_(FROM)) {
  13706. var idName = new IdentifierToken(defaultToken.location, DEFAULT);
  13707. var namedExport = new ForwardDefaultExport(this.getTreeLocation_(start), idName);
  13708. this.eatId_(FROM);
  13709. var moduleSpecifier = this.parseModuleSpecifier_();
  13710. return new NamedExport(this.getTreeLocation_(start), namedExport, moduleSpecifier);
  13711. }
  13712. var exportValue;
  13713. switch (peekType()) {
  13714. case FUNCTION:
  13715. {
  13716. var tree = this.parseFunctionExpression_();
  13717. if (tree.name) {
  13718. tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  13719. }
  13720. exportValue = tree;
  13721. break;
  13722. }
  13723. case CLASS:
  13724. {
  13725. if (!this.options_.classes) {
  13726. return this.parseSyntaxError_('Unexpected reserved word');
  13727. }
  13728. var tree$__5 = this.parseClassExpression_();
  13729. if (tree$__5.name) {
  13730. tree$__5 = new ClassDeclaration(tree$__5.location, tree$__5.name, tree$__5.superClass, tree$__5.elements, tree$__5.annotations, tree$__5.typeParameters);
  13731. }
  13732. exportValue = tree$__5;
  13733. break;
  13734. }
  13735. default:
  13736. exportValue = this.parseAssignmentExpression_(ALLOW_IN);
  13737. this.eatPossibleImplicitSemiColon_();
  13738. }
  13739. return new ExportDefault(this.getTreeLocation_(start), exportValue);
  13740. },
  13741. parseNamedExport_: function() {
  13742. var start = this.getTreeStartLocation_();
  13743. var exportClause,
  13744. moduleSpecifier = null;
  13745. switch (peekType()) {
  13746. case OPEN_CURLY:
  13747. exportClause = this.parseExportSpecifierSet_();
  13748. if (this.peekPredefinedString_(FROM)) {
  13749. this.eatId_(FROM);
  13750. moduleSpecifier = this.parseModuleSpecifier_();
  13751. } else {
  13752. this.validateExportSpecifierSet_(exportClause);
  13753. }
  13754. break;
  13755. case STAR:
  13756. exportClause = this.parseExportStar_();
  13757. this.eatId_(FROM);
  13758. moduleSpecifier = this.parseModuleSpecifier_();
  13759. break;
  13760. default:
  13761. exportClause = this.parseForwardDefaultExport_();
  13762. this.eatId_(FROM);
  13763. moduleSpecifier = this.parseModuleSpecifier_();
  13764. break;
  13765. }
  13766. this.eatPossibleImplicitSemiColon_();
  13767. return new NamedExport(this.getTreeLocation_(start), exportClause, moduleSpecifier);
  13768. },
  13769. parseExportStar_: function() {
  13770. var start = this.getTreeStartLocation_();
  13771. this.eat_(STAR);
  13772. if (this.peekPredefinedString_(AS)) {
  13773. this.eatId_(AS);
  13774. var name = this.eatIdName_();
  13775. return new NameSpaceExport(this.getTreeLocation_(start), name);
  13776. }
  13777. return new ExportStar(this.getTreeLocation_(start));
  13778. },
  13779. parseExportSpecifierSet_: function() {
  13780. var start = this.getTreeStartLocation_();
  13781. this.eat_(OPEN_CURLY);
  13782. var specifiers = [this.parseExportSpecifier_()];
  13783. while (this.eatIf_(COMMA)) {
  13784. if (peek(CLOSE_CURLY))
  13785. break;
  13786. specifiers.push(this.parseExportSpecifier_());
  13787. }
  13788. this.eat_(CLOSE_CURLY);
  13789. return new ExportSpecifierSet(this.getTreeLocation_(start), specifiers);
  13790. },
  13791. parseExportSpecifier_: function() {
  13792. var start = this.getTreeStartLocation_();
  13793. var lhs = this.eatIdName_();
  13794. var rhs = null;
  13795. if (this.peekPredefinedString_(AS)) {
  13796. this.eatId_();
  13797. rhs = this.eatIdName_();
  13798. }
  13799. return new ExportSpecifier(this.getTreeLocation_(start), lhs, rhs);
  13800. },
  13801. parseForwardDefaultExport_: function() {
  13802. var start = this.getTreeStartLocation_();
  13803. var idName = this.eatIdName_();
  13804. return new ForwardDefaultExport(this.getTreeLocation_(start), idName);
  13805. },
  13806. validateExportSpecifierSet_: function(tree) {
  13807. for (var i = 0; i < tree.specifiers.length; i++) {
  13808. var specifier = tree.specifiers[i];
  13809. if (getKeywordType(specifier.lhs.value)) {
  13810. this.reportError_(specifier.lhs.location, ("Unexpected token " + specifier.lhs.value));
  13811. }
  13812. }
  13813. },
  13814. peekId_: function(type) {
  13815. if (type === IDENTIFIER)
  13816. return true;
  13817. if (this.strictMode_)
  13818. return false;
  13819. return peekToken().isStrictKeyword();
  13820. },
  13821. peekIdName_: function(token) {
  13822. return token.type === IDENTIFIER || token.isKeyword();
  13823. },
  13824. parseClassShared_: function(constr) {
  13825. var start = this.getTreeStartLocation_();
  13826. var strictMode = this.strictMode_;
  13827. this.strictMode_ = true;
  13828. this.eat_(CLASS);
  13829. var name = null;
  13830. var typeParameters = null;
  13831. var annotations = [];
  13832. if (constr === ClassDeclaration || !peek(EXTENDS) && !peek(OPEN_CURLY)) {
  13833. name = this.parseBindingIdentifier_();
  13834. if (this.options_.types) {
  13835. typeParameters = this.parseTypeParametersOpt_();
  13836. }
  13837. annotations = this.popAnnotations_();
  13838. }
  13839. var superClass = null;
  13840. if (this.eatIf_(EXTENDS)) {
  13841. superClass = this.parseLeftHandSideExpression_();
  13842. superClass = this.coverFormalsToParenExpression_(superClass);
  13843. }
  13844. this.eat_(OPEN_CURLY);
  13845. var elements = this.parseClassElements_(superClass);
  13846. this.eat_(CLOSE_CURLY);
  13847. this.strictMode_ = strictMode;
  13848. return new constr(this.getTreeLocation_(start), name, superClass, elements, annotations, typeParameters);
  13849. },
  13850. parseClassDeclaration_: function() {
  13851. return this.parseClassShared_(ClassDeclaration);
  13852. },
  13853. parseClassExpression_: function() {
  13854. return this.parseClassShared_(ClassExpression);
  13855. },
  13856. parseClassElements_: function(derivedClass) {
  13857. var result = [];
  13858. while (true) {
  13859. var type = peekType();
  13860. if (type === SEMI_COLON) {
  13861. nextToken();
  13862. } else if (this.peekClassElement_(peekType())) {
  13863. result.push(this.parseClassElement_(derivedClass));
  13864. } else {
  13865. break;
  13866. }
  13867. }
  13868. return result;
  13869. },
  13870. peekClassElement_: function(type) {
  13871. return this.peekPropertyName_(type) || type === STAR && this.options_.generators || type === AT && this.options_.annotations;
  13872. },
  13873. parsePropertyName_: function() {
  13874. if (peek(OPEN_SQUARE))
  13875. return this.parseComputedPropertyName_();
  13876. return this.parseLiteralPropertyName_();
  13877. },
  13878. parseLiteralPropertyName_: function() {
  13879. var start = this.getTreeStartLocation_();
  13880. var token = nextToken();
  13881. return new LiteralPropertyName(this.getTreeLocation_(start), token);
  13882. },
  13883. parseComputedPropertyName_: function() {
  13884. var start = this.getTreeStartLocation_();
  13885. this.eat_(OPEN_SQUARE);
  13886. var expression = this.parseAssignmentExpression_(ALLOW_IN);
  13887. this.eat_(CLOSE_SQUARE);
  13888. return new ComputedPropertyName(this.getTreeLocation_(start), expression);
  13889. },
  13890. parseStatement: function() {
  13891. var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT);
  13892. var result = this.parseModuleItem_(peekType());
  13893. this.popFunctionState_(fs);
  13894. return result;
  13895. },
  13896. parseStatements: function() {
  13897. var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT);
  13898. var result = this.parseModuleItemList_();
  13899. this.popFunctionState_(fs);
  13900. return result;
  13901. },
  13902. parseStatement_: function() {
  13903. return this.parseStatementWithType_(peekType());
  13904. },
  13905. parseStatementWithType_: function(type) {
  13906. switch (type) {
  13907. case RETURN:
  13908. return this.parseReturnStatement_();
  13909. case VAR:
  13910. return this.parseVariableStatement_();
  13911. case IF:
  13912. return this.parseIfStatement_();
  13913. case FOR:
  13914. return this.parseForStatement_();
  13915. case BREAK:
  13916. return this.parseBreakStatement_();
  13917. case SWITCH:
  13918. return this.parseSwitchStatement_();
  13919. case THROW:
  13920. return this.parseThrowStatement_();
  13921. case WHILE:
  13922. return this.parseWhileStatement_();
  13923. case AT:
  13924. if (this.options_.annotations)
  13925. return this.parseAnnotatedDeclarations_(false);
  13926. break;
  13927. case CONTINUE:
  13928. return this.parseContinueStatement_();
  13929. case DEBUGGER:
  13930. return this.parseDebuggerStatement_();
  13931. case DO:
  13932. return this.parseDoWhileStatement_();
  13933. case OPEN_CURLY:
  13934. return this.parseBlock_();
  13935. case SEMI_COLON:
  13936. return this.parseEmptyStatement_();
  13937. case TRY:
  13938. return this.parseTryStatement_();
  13939. case WITH:
  13940. return this.parseWithStatement_();
  13941. case INTERFACE:
  13942. if (this.options_.types) {
  13943. return this.parseInterfaceDeclaration_();
  13944. }
  13945. }
  13946. return this.parseFallThroughStatement_();
  13947. },
  13948. parseFunctionDeclaration_: function() {
  13949. return this.parseFunction_(FunctionDeclaration);
  13950. },
  13951. parseFunctionExpression_: function() {
  13952. return this.parseFunction_(FunctionExpression);
  13953. },
  13954. parseAsyncFunctionDeclaration_: function(asyncToken) {
  13955. return this.parseAsyncFunction_(asyncToken, FunctionDeclaration);
  13956. },
  13957. parseAsyncFunctionExpression_: function(asyncToken) {
  13958. return this.parseAsyncFunction_(asyncToken, FunctionExpression);
  13959. },
  13960. peekAsyncStar_: function() {
  13961. return this.options_.asyncGenerators && peek(STAR);
  13962. },
  13963. parseAsyncFunction_: function(asyncToken, ctor) {
  13964. var start = asyncToken.location.start;
  13965. this.eat_(FUNCTION);
  13966. var kind = FUNCTION_STATE_FUNCTION | FUNCTION_STATE_ASYNC;
  13967. if (this.peekAsyncStar_()) {
  13968. kind |= FUNCTION_STATE_GENERATOR;
  13969. this.eat_(STAR);
  13970. asyncToken = new IdentifierToken(asyncToken.location, ASYNC_STAR);
  13971. }
  13972. var fs = this.pushFunctionState_(kind);
  13973. var f = this.parseFunction2_(start, asyncToken, ctor);
  13974. this.popFunctionState_(fs);
  13975. return f;
  13976. },
  13977. parseFunction_: function(ctor) {
  13978. var start = this.getTreeStartLocation_();
  13979. this.eat_(FUNCTION);
  13980. var functionKind = null;
  13981. var kind = FUNCTION_STATE_FUNCTION;
  13982. if (this.options_.generators && peek(STAR)) {
  13983. functionKind = this.eat_(STAR);
  13984. kind |= FUNCTION_STATE_GENERATOR;
  13985. }
  13986. var fs = this.pushFunctionState_(kind);
  13987. var f = this.parseFunction2_(start, functionKind, ctor);
  13988. this.popFunctionState_(fs);
  13989. return f;
  13990. },
  13991. parseFunction2_: function(start, functionKind, ctor) {
  13992. var name = null;
  13993. var annotations = [];
  13994. if (ctor === FunctionDeclaration || this.peekBindingIdentifier_(peekType())) {
  13995. name = this.parseBindingIdentifier_();
  13996. annotations = this.popAnnotations_();
  13997. }
  13998. this.eat_(OPEN_PAREN);
  13999. var parameters = this.parseFormalParameters_();
  14000. this.eat_(CLOSE_PAREN);
  14001. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14002. var body = this.parseFunctionBody_(parameters);
  14003. return new ctor(this.getTreeLocation_(start), name, functionKind, parameters, typeAnnotation, annotations, body);
  14004. },
  14005. peekRest_: function(type) {
  14006. return type === DOT_DOT_DOT && this.options_.restParameters;
  14007. },
  14008. parseFormalParameters_: function() {
  14009. var start = this.getTreeStartLocation_();
  14010. var formals = [];
  14011. this.pushAnnotations_();
  14012. var type = peekType();
  14013. if (this.peekRest_(type)) {
  14014. formals.push(this.parseFormalRestParameter_());
  14015. } else {
  14016. if (this.peekFormalParameter_(peekType()))
  14017. formals.push(this.parseFormalParameter_(INITIALIZER_OPTIONAL));
  14018. while (this.eatIf_(COMMA)) {
  14019. this.pushAnnotations_();
  14020. if (this.peekRest_(peekType())) {
  14021. formals.push(this.parseFormalRestParameter_());
  14022. break;
  14023. }
  14024. formals.push(this.parseFormalParameter_(INITIALIZER_OPTIONAL));
  14025. }
  14026. }
  14027. return new FormalParameterList(this.getTreeLocation_(start), formals);
  14028. },
  14029. peekFormalParameter_: function(type) {
  14030. return this.peekBindingElement_(type);
  14031. },
  14032. parseFormalParameter_: function(initializerAllowed) {
  14033. var start = this.getTreeStartLocation_();
  14034. var binding = this.parseBindingElementBinding_();
  14035. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14036. var initializer = this.parseBindingElementInitializer_(initializerAllowed);
  14037. return new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, initializer), typeAnnotation, this.popAnnotations_());
  14038. },
  14039. parseFormalRestParameter_: function() {
  14040. var start = this.getTreeStartLocation_();
  14041. var restParameter = this.parseRestParameter_();
  14042. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14043. return new FormalParameter(this.getTreeLocation_(start), restParameter, typeAnnotation, this.popAnnotations_());
  14044. },
  14045. parseRestParameter_: function() {
  14046. var start = this.getTreeStartLocation_();
  14047. this.eat_(DOT_DOT_DOT);
  14048. var id = this.parseBindingIdentifier_();
  14049. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14050. return new RestParameter(this.getTreeLocation_(start), id, typeAnnotation);
  14051. },
  14052. parseFunctionBody_: function(params) {
  14053. var start = this.getTreeStartLocation_();
  14054. this.eat_(OPEN_CURLY);
  14055. var strictMode = this.strictMode_;
  14056. var result = this.parseStatementList_(!strictMode);
  14057. validateParameters(params, this.strictMode_, this.errorReporter_);
  14058. this.strictMode_ = strictMode;
  14059. this.eat_(CLOSE_CURLY);
  14060. return new FunctionBody(this.getTreeLocation_(start), result);
  14061. },
  14062. parseSpreadExpression_: function() {
  14063. var start = this.getTreeStartLocation_();
  14064. this.eat_(DOT_DOT_DOT);
  14065. var operand = this.parseAssignmentExpression_(ALLOW_IN);
  14066. return new SpreadExpression(this.getTreeLocation_(start), operand);
  14067. },
  14068. parseBlock_: function() {
  14069. var start = this.getTreeStartLocation_();
  14070. this.eat_(OPEN_CURLY);
  14071. var result = this.parseStatementList_(false);
  14072. this.eat_(CLOSE_CURLY);
  14073. return new Block(this.getTreeLocation_(start), result);
  14074. },
  14075. parseVariableStatement_: function() {
  14076. var start = this.getTreeStartLocation_();
  14077. var declarations = this.parseVariableDeclarationList_(ALLOW_IN, INITIALIZER_REQUIRED);
  14078. this.checkInitializers_(declarations);
  14079. this.eatPossibleImplicitSemiColon_();
  14080. return new VariableStatement(this.getTreeLocation_(start), declarations);
  14081. },
  14082. parseVariableDeclarationList_: function(allowIn, initializerRequired) {
  14083. var type = peekType();
  14084. switch (type) {
  14085. case CONST:
  14086. case LET:
  14087. case VAR:
  14088. nextToken();
  14089. break;
  14090. default:
  14091. throw Error('unreachable');
  14092. }
  14093. var start = this.getTreeStartLocation_();
  14094. var declarations = [];
  14095. declarations.push(this.parseVariableDeclaration_(type, allowIn, initializerRequired));
  14096. while (this.eatIf_(COMMA)) {
  14097. declarations.push(this.parseVariableDeclaration_(type, allowIn, initializerRequired));
  14098. }
  14099. return new VariableDeclarationList(this.getTreeLocation_(start), type, declarations);
  14100. },
  14101. parseVariableDeclaration_: function(binding, noIn, initializerRequired) {
  14102. var initRequired = initializerRequired !== INITIALIZER_OPTIONAL;
  14103. var start = this.getTreeStartLocation_();
  14104. var lvalue;
  14105. var typeAnnotation;
  14106. if (this.peekPattern_(peekType())) {
  14107. lvalue = this.parseBindingPattern_();
  14108. typeAnnotation = null;
  14109. } else {
  14110. lvalue = this.parseBindingIdentifier_();
  14111. typeAnnotation = this.parseTypeAnnotationOpt_();
  14112. }
  14113. var init = null;
  14114. if (peek(EQUAL)) {
  14115. init = this.parseInitializer_(noIn);
  14116. } else if (lvalue.isPattern() && initRequired) {
  14117. this.reportError_(lvalue.location, 'destructuring must have an initializer');
  14118. }
  14119. return new VariableDeclaration(this.getTreeLocation_(start), lvalue, typeAnnotation, init);
  14120. },
  14121. parseInitializer_: function(allowIn) {
  14122. this.eat_(EQUAL);
  14123. return this.parseAssignmentExpression_(allowIn);
  14124. },
  14125. parseInitializerOpt_: function(allowIn) {
  14126. if (this.eatIf_(EQUAL))
  14127. return this.parseAssignmentExpression_(allowIn);
  14128. return null;
  14129. },
  14130. parseEmptyStatement_: function() {
  14131. var start = this.getTreeStartLocation_();
  14132. this.eat_(SEMI_COLON);
  14133. return new EmptyStatement(this.getTreeLocation_(start));
  14134. },
  14135. parseFallThroughStatement_: function() {
  14136. var start = this.getTreeStartLocation_();
  14137. var expression;
  14138. switch (peekType()) {
  14139. case OPEN_CURLY:
  14140. return this.parseUnexpectedToken_();
  14141. case FUNCTION:
  14142. case CLASS:
  14143. return this.parseUnexpectedReservedWord_(peekToken());
  14144. case LET:
  14145. {
  14146. var token = peekLookahead(OPEN_SQUARE);
  14147. if (token) {
  14148. return this.parseSyntaxError_("A statement cannot start with 'let ['");
  14149. }
  14150. }
  14151. }
  14152. if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC) && peekLookahead(FUNCTION)) {
  14153. var asyncToken = this.eatId_();
  14154. var functionToken = peekTokenNoLineTerminator();
  14155. if (functionToken !== null)
  14156. return this.parseAsyncFunctionDeclaration_(asyncToken);
  14157. expression = new IdentifierExpression(this.getTreeLocation_(start), asyncToken);
  14158. } else {
  14159. expression = this.parseExpression_(ALLOW_IN);
  14160. }
  14161. if (expression.type === IDENTIFIER_EXPRESSION) {
  14162. if (this.eatIf_(COLON)) {
  14163. var nameToken = expression.identifierToken;
  14164. var statement = this.parseStatement_();
  14165. return new LabelledStatement(this.getTreeLocation_(start), nameToken, statement);
  14166. }
  14167. }
  14168. this.eatPossibleImplicitSemiColon_();
  14169. return new ExpressionStatement(this.getTreeLocation_(start), expression);
  14170. },
  14171. parseIfStatement_: function() {
  14172. var start = this.getTreeStartLocation_();
  14173. this.eat_(IF);
  14174. this.eat_(OPEN_PAREN);
  14175. var condition = this.parseExpression_(ALLOW_IN);
  14176. this.eat_(CLOSE_PAREN);
  14177. var ifClause = this.parseStatement_();
  14178. var elseClause = null;
  14179. if (this.eatIf_(ELSE)) {
  14180. elseClause = this.parseStatement_();
  14181. }
  14182. return new IfStatement(this.getTreeLocation_(start), condition, ifClause, elseClause);
  14183. },
  14184. parseDoWhileStatement_: function() {
  14185. var start = this.getTreeStartLocation_();
  14186. this.eat_(DO);
  14187. var body = this.parseStatement_();
  14188. this.eat_(WHILE);
  14189. this.eat_(OPEN_PAREN);
  14190. var condition = this.parseExpression_(ALLOW_IN);
  14191. this.eat_(CLOSE_PAREN);
  14192. this.eatPossibleImplicitSemiColon_();
  14193. return new DoWhileStatement(this.getTreeLocation_(start), body, condition);
  14194. },
  14195. parseWhileStatement_: function() {
  14196. var start = this.getTreeStartLocation_();
  14197. this.eat_(WHILE);
  14198. this.eat_(OPEN_PAREN);
  14199. var condition = this.parseExpression_(ALLOW_IN);
  14200. this.eat_(CLOSE_PAREN);
  14201. var body = this.parseStatement_();
  14202. return new WhileStatement(this.getTreeLocation_(start), condition, body);
  14203. },
  14204. parseForStatement_: function() {
  14205. var start = this.getTreeStartLocation_();
  14206. this.eat_(FOR);
  14207. this.eat_(OPEN_PAREN);
  14208. var type = peekType();
  14209. if (this.peekVariableDeclarationList_(type)) {
  14210. var variables = this.parseVariableDeclarationList_(NO_IN, INITIALIZER_OPTIONAL);
  14211. var declarations = variables.declarations;
  14212. if (declarations.length > 1 || containsInitializer(declarations)) {
  14213. return this.parseForStatement2_(start, variables);
  14214. }
  14215. type = peekType();
  14216. if (type === IN) {
  14217. return this.parseForInStatement_(start, variables);
  14218. } else if (this.peekOf_()) {
  14219. return this.parseForOfStatement_(start, variables);
  14220. } else if (this.allowForOn_ && this.peekOn_()) {
  14221. return this.parseForOnStatement_(start, variables);
  14222. } else {
  14223. this.checkInitializers_(variables);
  14224. return this.parseForStatement2_(start, variables);
  14225. }
  14226. }
  14227. if (type === SEMI_COLON) {
  14228. return this.parseForStatement2_(start, null);
  14229. }
  14230. var coverInitializedNameCount = this.coverInitializedNameCount_;
  14231. var initializer = this.parseExpressionAllowPattern_(NO_IN);
  14232. type = peekType();
  14233. if ((type === IN || this.peekOf_() || this.allowForOn_ && this.peekOn_())) {
  14234. initializer = this.transformLeftHandSideExpression_(initializer);
  14235. this.validateAssignmentTarget_(initializer, 'assignment');
  14236. if (this.peekOf_()) {
  14237. return this.parseForOfStatement_(start, initializer);
  14238. } else if (this.allowForOn_ && this.peekOn_()) {
  14239. return this.parseForOnStatement_(start, initializer);
  14240. }
  14241. return this.parseForInStatement_(start, initializer);
  14242. }
  14243. this.ensureNoCoverInitializedNames_(initializer, coverInitializedNameCount);
  14244. return this.parseForStatement2_(start, initializer);
  14245. },
  14246. peekOf_: function() {
  14247. return this.options_.forOf && this.peekPredefinedString_(OF);
  14248. },
  14249. peekOn_: function() {
  14250. return this.options_.forOn && this.peekPredefinedString_(ON);
  14251. },
  14252. parseForOfStatement_: function(start, initializer) {
  14253. this.eatId_();
  14254. var collection = this.parseExpression_(ALLOW_IN);
  14255. this.eat_(CLOSE_PAREN);
  14256. var body = this.parseStatement_();
  14257. return new ForOfStatement(this.getTreeLocation_(start), initializer, collection, body);
  14258. },
  14259. parseForOnStatement_: function(start, initializer) {
  14260. this.eatId_();
  14261. var observable = this.parseExpression_(ALLOW_IN);
  14262. this.eat_(CLOSE_PAREN);
  14263. var body = this.parseStatement_();
  14264. return new ForOnStatement(this.getTreeLocation_(start), initializer, observable, body);
  14265. },
  14266. checkInitializers_: function(variables) {
  14267. if (this.options_.blockBinding && variables.declarationType === CONST) {
  14268. var type = variables.declarationType;
  14269. for (var i = 0; i < variables.declarations.length; i++) {
  14270. if (!this.checkInitializer_(type, variables.declarations[i])) {
  14271. break;
  14272. }
  14273. }
  14274. }
  14275. },
  14276. checkInitializer_: function(type, declaration) {
  14277. if (this.options_.blockBinding && type === CONST && declaration.initializer === null) {
  14278. this.reportError_(declaration.location, 'const variables must have an initializer');
  14279. return false;
  14280. }
  14281. return true;
  14282. },
  14283. peekVariableDeclarationList_: function(type) {
  14284. switch (type) {
  14285. case VAR:
  14286. return true;
  14287. case CONST:
  14288. case LET:
  14289. return this.options_.blockBinding;
  14290. default:
  14291. return false;
  14292. }
  14293. },
  14294. parseForStatement2_: function(start, initializer) {
  14295. this.eat_(SEMI_COLON);
  14296. var condition = null;
  14297. if (!peek(SEMI_COLON)) {
  14298. condition = this.parseExpression_(ALLOW_IN);
  14299. }
  14300. this.eat_(SEMI_COLON);
  14301. var increment = null;
  14302. if (!peek(CLOSE_PAREN)) {
  14303. increment = this.parseExpression_(ALLOW_IN);
  14304. }
  14305. this.eat_(CLOSE_PAREN);
  14306. var body = this.parseStatement_();
  14307. return new ForStatement(this.getTreeLocation_(start), initializer, condition, increment, body);
  14308. },
  14309. parseForInStatement_: function(start, initializer) {
  14310. this.eat_(IN);
  14311. var collection = this.parseExpression_(ALLOW_IN);
  14312. this.eat_(CLOSE_PAREN);
  14313. var body = this.parseStatement_();
  14314. return new ForInStatement(this.getTreeLocation_(start), initializer, collection, body);
  14315. },
  14316. parseContinueStatement_: function() {
  14317. var start = this.getTreeStartLocation_();
  14318. this.eat_(CONTINUE);
  14319. var name = null;
  14320. if (!this.peekImplicitSemiColon_()) {
  14321. name = this.eatIdOpt_();
  14322. }
  14323. this.eatPossibleImplicitSemiColon_();
  14324. return new ContinueStatement(this.getTreeLocation_(start), name);
  14325. },
  14326. parseBreakStatement_: function() {
  14327. var start = this.getTreeStartLocation_();
  14328. this.eat_(BREAK);
  14329. var name = null;
  14330. if (!this.peekImplicitSemiColon_()) {
  14331. name = this.eatIdOpt_();
  14332. }
  14333. this.eatPossibleImplicitSemiColon_();
  14334. return new BreakStatement(this.getTreeLocation_(start), name);
  14335. },
  14336. parseReturnStatement_: function() {
  14337. var start = this.getTreeStartLocation_();
  14338. var returnToken = this.eat_(RETURN);
  14339. if (this.functionState_.isTopMost()) {
  14340. this.reportError_(returnToken.location, 'Illegal return statement');
  14341. }
  14342. var expression = null;
  14343. if (!this.peekImplicitSemiColon_()) {
  14344. expression = this.parseExpression_(ALLOW_IN);
  14345. }
  14346. this.eatPossibleImplicitSemiColon_();
  14347. return new ReturnStatement(this.getTreeLocation_(start), expression);
  14348. },
  14349. parseYieldExpression_: function(allowIn) {
  14350. var start = this.getTreeStartLocation_();
  14351. this.eat_(YIELD);
  14352. var expression = null;
  14353. var isYieldFor = false;
  14354. var token = peekTokenNoLineTerminator();
  14355. if (token !== null) {
  14356. switch (token.type) {
  14357. case CLOSE_CURLY:
  14358. case CLOSE_PAREN:
  14359. case CLOSE_SQUARE:
  14360. case COLON:
  14361. case COMMA:
  14362. case END_OF_FILE:
  14363. case SEMI_COLON:
  14364. break;
  14365. default:
  14366. isYieldFor = this.eatIf_(STAR);
  14367. expression = this.parseAssignmentExpression_(allowIn);
  14368. }
  14369. }
  14370. return new YieldExpression(this.getTreeLocation_(start), expression, isYieldFor);
  14371. },
  14372. parseWithStatement_: function() {
  14373. var start = this.getTreeStartLocation_();
  14374. var withToken = this.eat_(WITH);
  14375. if (this.strictMode_) {
  14376. this.reportError_(withToken.location, 'Strict mode code may not include a with statement');
  14377. }
  14378. this.eat_(OPEN_PAREN);
  14379. var expression = this.parseExpression_(ALLOW_IN);
  14380. this.eat_(CLOSE_PAREN);
  14381. var body = this.parseStatement_();
  14382. return new WithStatement(this.getTreeLocation_(start), expression, body);
  14383. },
  14384. parseSwitchStatement_: function() {
  14385. var start = this.getTreeStartLocation_();
  14386. this.eat_(SWITCH);
  14387. this.eat_(OPEN_PAREN);
  14388. var expression = this.parseExpression_(ALLOW_IN);
  14389. this.eat_(CLOSE_PAREN);
  14390. this.eat_(OPEN_CURLY);
  14391. var caseClauses = this.parseCaseClauses_();
  14392. this.eat_(CLOSE_CURLY);
  14393. return new SwitchStatement(this.getTreeLocation_(start), expression, caseClauses);
  14394. },
  14395. parseCaseClauses_: function() {
  14396. var foundDefaultClause = false;
  14397. var result = [];
  14398. while (true) {
  14399. var start = this.getTreeStartLocation_();
  14400. switch (peekType()) {
  14401. case CASE:
  14402. {
  14403. nextToken();
  14404. var expression = this.parseExpression_(ALLOW_IN);
  14405. this.eat_(COLON);
  14406. var statements = this.parseCaseStatementsOpt_();
  14407. result.push(new CaseClause(this.getTreeLocation_(start), expression, statements));
  14408. break;
  14409. }
  14410. case DEFAULT:
  14411. {
  14412. var defaultToken = nextToken();
  14413. if (foundDefaultClause) {
  14414. this.reportError_(defaultToken.location, 'Switch statements may have at most one \'default\' clause');
  14415. } else {
  14416. foundDefaultClause = true;
  14417. }
  14418. this.eat_(COLON);
  14419. result.push(new DefaultClause(this.getTreeLocation_(start), this.parseCaseStatementsOpt_()));
  14420. break;
  14421. }
  14422. default:
  14423. return result;
  14424. }
  14425. }
  14426. },
  14427. parseCaseStatementsOpt_: function() {
  14428. var result = [];
  14429. var type;
  14430. while (true) {
  14431. switch (type = peekType()) {
  14432. case CASE:
  14433. case DEFAULT:
  14434. case CLOSE_CURLY:
  14435. case END_OF_FILE:
  14436. return result;
  14437. }
  14438. result.push(this.parseStatementListItem_(type));
  14439. }
  14440. },
  14441. parseThrowStatement_: function() {
  14442. var start = this.getTreeStartLocation_();
  14443. this.eat_(THROW);
  14444. var value = null;
  14445. if (!this.peekImplicitSemiColon_()) {
  14446. value = this.parseExpression_(ALLOW_IN);
  14447. }
  14448. this.eatPossibleImplicitSemiColon_();
  14449. return new ThrowStatement(this.getTreeLocation_(start), value);
  14450. },
  14451. parseTryStatement_: function() {
  14452. var start = this.getTreeStartLocation_();
  14453. this.eat_(TRY);
  14454. var body = this.parseBlock_();
  14455. var catchBlock = null;
  14456. if (peek(CATCH)) {
  14457. catchBlock = this.parseCatch_();
  14458. }
  14459. var finallyBlock = null;
  14460. if (peek(FINALLY)) {
  14461. finallyBlock = this.parseFinallyBlock_();
  14462. }
  14463. if (catchBlock === null && finallyBlock === null) {
  14464. var token = peekToken();
  14465. this.reportError_(token.location, "'catch' or 'finally' expected.");
  14466. }
  14467. return new TryStatement(this.getTreeLocation_(start), body, catchBlock, finallyBlock);
  14468. },
  14469. parseCatch_: function() {
  14470. var start = this.getTreeStartLocation_();
  14471. var catchBlock;
  14472. this.eat_(CATCH);
  14473. this.eat_(OPEN_PAREN);
  14474. var binding;
  14475. if (this.peekPattern_(peekType()))
  14476. binding = this.parseBindingPattern_();
  14477. else
  14478. binding = this.parseBindingIdentifier_();
  14479. this.eat_(CLOSE_PAREN);
  14480. var catchBody = this.parseBlock_();
  14481. catchBlock = new Catch(this.getTreeLocation_(start), binding, catchBody);
  14482. return catchBlock;
  14483. },
  14484. parseFinallyBlock_: function() {
  14485. var start = this.getTreeStartLocation_();
  14486. this.eat_(FINALLY);
  14487. var finallyBlock = this.parseBlock_();
  14488. return new Finally(this.getTreeLocation_(start), finallyBlock);
  14489. },
  14490. parseDebuggerStatement_: function() {
  14491. var start = this.getTreeStartLocation_();
  14492. this.eat_(DEBUGGER);
  14493. this.eatPossibleImplicitSemiColon_();
  14494. return new DebuggerStatement(this.getTreeLocation_(start));
  14495. },
  14496. parsePrimaryExpression_: function() {
  14497. switch (peekType()) {
  14498. case CLASS:
  14499. return this.options_.classes ? this.parseClassExpression_() : this.parseUnexpectedReservedWord_(peekToken());
  14500. case THIS:
  14501. return this.parseThisExpression_();
  14502. case IDENTIFIER:
  14503. {
  14504. var identifier = this.parseIdentifierExpression_();
  14505. if (this.options_.asyncFunctions && identifier.identifierToken.value === ASYNC) {
  14506. var token$__6 = peekTokenNoLineTerminator();
  14507. if (token$__6 && token$__6.type === FUNCTION) {
  14508. var asyncToken = identifier.identifierToken;
  14509. return this.parseAsyncFunctionExpression_(asyncToken);
  14510. }
  14511. }
  14512. return identifier;
  14513. }
  14514. case NUMBER:
  14515. case STRING:
  14516. case TRUE:
  14517. case FALSE:
  14518. case NULL:
  14519. return this.parseLiteralExpression_();
  14520. case OPEN_SQUARE:
  14521. return this.parseArrayLiteral_();
  14522. case OPEN_CURLY:
  14523. return this.parseObjectLiteral_();
  14524. case OPEN_PAREN:
  14525. return this.parsePrimaryExpressionStartingWithParen_();
  14526. case SLASH:
  14527. case SLASH_EQUAL:
  14528. return this.parseRegularExpressionLiteral_();
  14529. case NO_SUBSTITUTION_TEMPLATE:
  14530. case TEMPLATE_HEAD:
  14531. if (this.options_.templateLiterals) {
  14532. return this.parseTemplateLiteral_(null);
  14533. }
  14534. break;
  14535. case IMPLEMENTS:
  14536. case INTERFACE:
  14537. case PACKAGE:
  14538. case PRIVATE:
  14539. case PROTECTED:
  14540. case PUBLIC:
  14541. case STATIC:
  14542. case YIELD:
  14543. if (this.strictMode_) {
  14544. this.reportReservedIdentifier_(nextToken());
  14545. }
  14546. return this.parseIdentifierExpression_();
  14547. case OPEN_ANGLE:
  14548. if (this.options_.jsx) {
  14549. return this.parseJsxElement_();
  14550. }
  14551. break;
  14552. case END_OF_FILE:
  14553. return this.parseSyntaxError_('Unexpected end of input');
  14554. }
  14555. var token = peekToken();
  14556. if (token.isKeyword()) {
  14557. return this.parseUnexpectedReservedWord_(token);
  14558. }
  14559. return this.parseUnexpectedToken_(token);
  14560. },
  14561. parseSuperExpression_: function(isNew) {
  14562. var start = this.getTreeStartLocation_();
  14563. var fs = this.functionState_;
  14564. while (fs && fs.isArrowFunction()) {
  14565. fs = fs.outer;
  14566. }
  14567. var superToken = this.eat_(SUPER);
  14568. if (!fs || !fs.isMethod()) {
  14569. this.reportError_(superToken.location, 'super is only allowed in methods');
  14570. }
  14571. var operand = new SuperExpression(this.getTreeLocation_(start));
  14572. var type = peekType();
  14573. if (isNew) {
  14574. if (type === OPEN_SQUARE) {
  14575. return this.parseMemberLookupExpression_(start, operand);
  14576. }
  14577. return this.parseMemberExpression_(start, operand);
  14578. }
  14579. switch (type) {
  14580. case OPEN_SQUARE:
  14581. return this.parseMemberLookupExpression_(start, operand);
  14582. case PERIOD:
  14583. return this.parseMemberExpression_(start, operand);
  14584. case OPEN_PAREN:
  14585. {
  14586. var superCall = this.parseCallExpression_(start, operand);
  14587. if (!fs.isDerivedConstructor()) {
  14588. this.reportError_(superToken.location, 'super call is only allowed in derived constructor');
  14589. }
  14590. return superCall;
  14591. }
  14592. }
  14593. return this.parseUnexpectedToken_();
  14594. },
  14595. parseThisExpression_: function() {
  14596. var start = this.getTreeStartLocation_();
  14597. this.eat_(THIS);
  14598. return new ThisExpression(this.getTreeLocation_(start));
  14599. },
  14600. peekBindingIdentifier_: function(type) {
  14601. return this.peekId_(type);
  14602. },
  14603. parseBindingIdentifier_: function() {
  14604. var start = this.getTreeStartLocation_();
  14605. var identifier = this.eatId_();
  14606. return new BindingIdentifier(this.getTreeLocation_(start), identifier);
  14607. },
  14608. parseIdentifierExpression_: function() {
  14609. var start = this.getTreeStartLocation_();
  14610. var identifier = this.eatId_();
  14611. return new IdentifierExpression(this.getTreeLocation_(start), identifier);
  14612. },
  14613. parseIdentifierNameExpression_: function() {
  14614. var start = this.getTreeStartLocation_();
  14615. var identifier = this.eatIdName_();
  14616. return new IdentifierExpression(this.getTreeLocation_(start), identifier);
  14617. },
  14618. parseLiteralExpression_: function() {
  14619. var start = this.getTreeStartLocation_();
  14620. var literal = this.nextLiteralToken_();
  14621. return new LiteralExpression(this.getTreeLocation_(start), literal);
  14622. },
  14623. nextLiteralToken_: function() {
  14624. return nextToken();
  14625. },
  14626. parseRegularExpressionLiteral_: function() {
  14627. var start = this.getTreeStartLocation_();
  14628. var literal = nextRegularExpressionLiteralToken();
  14629. return new LiteralExpression(this.getTreeLocation_(start), literal);
  14630. },
  14631. peekSpread_: function(type) {
  14632. return type === DOT_DOT_DOT && this.options_.spread;
  14633. },
  14634. parseArrayLiteral_: function() {
  14635. var start = this.getTreeStartLocation_();
  14636. var expression;
  14637. var elements = [];
  14638. this.eat_(OPEN_SQUARE);
  14639. var type = peekType();
  14640. if (type === FOR && this.options_.arrayComprehension)
  14641. return this.parseArrayComprehension_(start);
  14642. while (true) {
  14643. type = peekType();
  14644. if (type === COMMA) {
  14645. expression = null;
  14646. } else if (this.peekSpread_(type)) {
  14647. expression = this.parseSpreadExpression_();
  14648. } else if (type === CLOSE_SQUARE || type === END_OF_FILE) {
  14649. break;
  14650. } else {
  14651. expression = this.parseAssignmentExpression_(ALLOW_IN);
  14652. }
  14653. elements.push(expression);
  14654. type = peekType();
  14655. if (type !== CLOSE_SQUARE)
  14656. this.eat_(COMMA);
  14657. }
  14658. this.eat_(CLOSE_SQUARE);
  14659. return new ArrayLiteral(this.getTreeLocation_(start), elements);
  14660. },
  14661. parseArrayComprehension_: function(start) {
  14662. var list = this.parseComprehensionList_();
  14663. var expression = this.parseAssignmentExpression_(ALLOW_IN);
  14664. this.eat_(CLOSE_SQUARE);
  14665. return new ArrayComprehension(this.getTreeLocation_(start), list, expression);
  14666. },
  14667. parseComprehensionList_: function() {
  14668. var list = [this.parseComprehensionFor_()];
  14669. while (true) {
  14670. var type = peekType();
  14671. switch (type) {
  14672. case FOR:
  14673. list.push(this.parseComprehensionFor_());
  14674. break;
  14675. case IF:
  14676. list.push(this.parseComprehensionIf_());
  14677. break;
  14678. default:
  14679. return list;
  14680. }
  14681. }
  14682. },
  14683. parseComprehensionFor_: function() {
  14684. var start = this.getTreeStartLocation_();
  14685. this.eat_(FOR);
  14686. this.eat_(OPEN_PAREN);
  14687. var left = this.parseForBinding_();
  14688. this.eatId_(OF);
  14689. var iterator = this.parseExpression_(ALLOW_IN);
  14690. this.eat_(CLOSE_PAREN);
  14691. return new ComprehensionFor(this.getTreeLocation_(start), left, iterator);
  14692. },
  14693. parseComprehensionIf_: function() {
  14694. var start = this.getTreeStartLocation_();
  14695. this.eat_(IF);
  14696. this.eat_(OPEN_PAREN);
  14697. var expression = this.parseExpression_(ALLOW_IN);
  14698. this.eat_(CLOSE_PAREN);
  14699. return new ComprehensionIf(this.getTreeLocation_(start), expression);
  14700. },
  14701. parseObjectLiteral_: function() {
  14702. var start = this.getTreeStartLocation_();
  14703. var result = [];
  14704. this.eat_(OPEN_CURLY);
  14705. while (this.peekPropertyDefinition_(peekType())) {
  14706. var propertyDefinition = this.parsePropertyDefinition_();
  14707. result.push(propertyDefinition);
  14708. if (!this.eatIf_(COMMA))
  14709. break;
  14710. }
  14711. this.eat_(CLOSE_CURLY);
  14712. return new ObjectLiteral(this.getTreeLocation_(start), result);
  14713. },
  14714. parsePropertyDefinition: function() {
  14715. var fs = this.pushFunctionState_(FUNCTION_STATE_SCRIPT);
  14716. var result = this.parsePropertyDefinition_();
  14717. this.popFunctionState_(fs);
  14718. return result;
  14719. },
  14720. parsePropertyDefinition_: function() {
  14721. var start = this.getTreeStartLocation_();
  14722. var functionKind = null;
  14723. var isStatic = false;
  14724. if (this.options_.generators && this.options_.propertyMethods && peek(STAR)) {
  14725. var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR);
  14726. var m = this.parseGeneratorMethod_(start, isStatic, []);
  14727. this.popFunctionState_(fs);
  14728. return m;
  14729. }
  14730. if (this.options_.spreadProperties && peek(DOT_DOT_DOT)) {
  14731. return this.parseSpreadExpression_();
  14732. }
  14733. var token = peekToken();
  14734. var name = this.parsePropertyName_();
  14735. if (this.options_.propertyMethods && peek(OPEN_PAREN)) {
  14736. var fs$__7 = this.pushFunctionState_(FUNCTION_STATE_METHOD);
  14737. var m$__8 = this.parseMethod_(start, isStatic, functionKind, name, []);
  14738. this.popFunctionState_(fs$__7);
  14739. return m$__8;
  14740. }
  14741. if (this.eatIf_(COLON)) {
  14742. var value = this.parseAssignmentExpression_(ALLOW_IN);
  14743. return new PropertyNameAssignment(this.getTreeLocation_(start), name, value);
  14744. }
  14745. var type = peekType();
  14746. if (name.type === LITERAL_PROPERTY_NAME) {
  14747. var nameLiteral = name.literalToken;
  14748. if (nameLiteral.value === GET && this.peekPropertyName_(type)) {
  14749. return this.parseGetAccessor_(start, isStatic, []);
  14750. }
  14751. if (nameLiteral.value === SET && this.peekPropertyName_(type)) {
  14752. return this.parseSetAccessor_(start, isStatic, []);
  14753. }
  14754. if (this.options_.asyncFunctions && nameLiteral.value === ASYNC && (this.peekPropertyName_(type) || this.peekAsyncStar_())) {
  14755. var async = nameLiteral;
  14756. var kind = FUNCTION_STATE_METHOD | FUNCTION_STATE_ASYNC;
  14757. if (this.peekAsyncStar_()) {
  14758. kind |= FUNCTION_STATE_GENERATOR;
  14759. this.eat_(STAR);
  14760. async = new IdentifierToken(async.location, ASYNC_STAR);
  14761. }
  14762. var name$__9 = this.parsePropertyName_();
  14763. var fs$__10 = this.pushFunctionState_(kind);
  14764. var m$__11 = this.parseMethod_(start, isStatic, async, name$__9, []);
  14765. this.popFunctionState_(fs$__10);
  14766. return m$__11;
  14767. }
  14768. if (this.options_.propertyNameShorthand && (nameLiteral.type === IDENTIFIER || nameLiteral.isStrictKeyword() && !this.strictMode_ || nameLiteral.type === YIELD && this.allowYield_)) {
  14769. if (peek(EQUAL)) {
  14770. token = nextToken();
  14771. var coverInitializedNameCount = this.coverInitializedNameCount_;
  14772. var expr = this.parseAssignmentExpression_(ALLOW_IN);
  14773. this.ensureNoCoverInitializedNames_(expr, coverInitializedNameCount);
  14774. this.coverInitializedNameCount_++;
  14775. return new CoverInitializedName(this.getTreeLocation_(start), nameLiteral, token, expr);
  14776. }
  14777. return new PropertyNameShorthand(this.getTreeLocation_(start), nameLiteral);
  14778. }
  14779. if (this.strictMode_ && nameLiteral.isStrictKeyword())
  14780. this.reportReservedIdentifier_(nameLiteral);
  14781. }
  14782. if (name.type === COMPUTED_PROPERTY_NAME)
  14783. token = peekToken();
  14784. return this.parseUnexpectedToken_(token);
  14785. },
  14786. parseClassElement_: function(derivedClass) {
  14787. var start = this.getTreeStartLocation_();
  14788. var annotations = this.parseAnnotations_();
  14789. var type = peekType();
  14790. var isStatic = false,
  14791. functionKind = null;
  14792. switch (type) {
  14793. case STATIC:
  14794. {
  14795. var staticToken = nextToken();
  14796. type = peekType();
  14797. switch (type) {
  14798. case OPEN_PAREN:
  14799. {
  14800. var location = this.getTreeLocation_(start);
  14801. var name = new LiteralPropertyName(location, staticToken);
  14802. var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD);
  14803. var m = this.parseMethod_(start, isStatic, functionKind, name, annotations);
  14804. this.popFunctionState_(fs);
  14805. return m;
  14806. }
  14807. default:
  14808. isStatic = true;
  14809. if (type === STAR && this.options_.generators)
  14810. return this.parseGeneratorMethod_(start, true, annotations);
  14811. return this.parseClassElement2_(start, isStatic, annotations, derivedClass);
  14812. }
  14813. break;
  14814. }
  14815. case STAR:
  14816. return this.parseGeneratorMethod_(start, isStatic, annotations);
  14817. default:
  14818. return this.parseClassElement2_(start, isStatic, annotations, derivedClass);
  14819. }
  14820. },
  14821. parseGeneratorMethod_: function(start, isStatic, annotations) {
  14822. var functionKind = this.eat_(STAR);
  14823. var name = this.parsePropertyName_();
  14824. var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR);
  14825. var m = this.parseMethod_(start, isStatic, functionKind, name, annotations);
  14826. this.popFunctionState_(fs);
  14827. return m;
  14828. },
  14829. parseMethod_: function(start, isStatic, functionKind, name, annotations) {
  14830. this.eat_(OPEN_PAREN);
  14831. var parameterList = this.parseFormalParameters_();
  14832. this.eat_(CLOSE_PAREN);
  14833. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14834. var body = this.parseFunctionBody_(parameterList);
  14835. return new Method(this.getTreeLocation_(start), isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body, null);
  14836. },
  14837. parsePropertyVariableDeclaration_: function(start, isStatic, name, annotations) {
  14838. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14839. var initializer = this.parseInitializerOpt_(ALLOW_IN);
  14840. this.eat_(SEMI_COLON);
  14841. return new PropertyVariableDeclaration(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations, initializer);
  14842. },
  14843. parseClassElement2_: function(start, isStatic, annotations, derivedClass) {
  14844. var functionKind = null;
  14845. var name = this.parsePropertyName_();
  14846. var type = peekType();
  14847. if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === GET && this.peekPropertyName_(type)) {
  14848. return this.parseGetAccessor_(start, isStatic, annotations);
  14849. }
  14850. if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === SET && this.peekPropertyName_(type)) {
  14851. return this.parseSetAccessor_(start, isStatic, annotations);
  14852. }
  14853. if (this.options_.asyncFunctions && name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === ASYNC && (this.peekPropertyName_(type) || this.peekAsyncStar_())) {
  14854. var async = name.literalToken;
  14855. var kind = FUNCTION_STATE_METHOD | FUNCTION_STATE_ASYNC;
  14856. if (this.peekAsyncStar_()) {
  14857. kind |= FUNCTION_STATE_GENERATOR;
  14858. this.eat_(STAR);
  14859. async = new IdentifierToken(async.location, ASYNC_STAR);
  14860. }
  14861. name = this.parsePropertyName_();
  14862. var fs = this.pushFunctionState_(kind);
  14863. var m = this.parseMethod_(start, isStatic, async, name, annotations);
  14864. this.popFunctionState_(fs);
  14865. return m;
  14866. }
  14867. if (!this.options_.memberVariables || type === OPEN_PAREN) {
  14868. var kind$__12 = FUNCTION_STATE_METHOD;
  14869. var isDerivedConstructor = derivedClass && !isStatic && functionKind === null && name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === CONSTRUCTOR;
  14870. if (isDerivedConstructor) {
  14871. kind$__12 |= FUNCTION_STATE_DERIVED_CONSTRUCTOR;
  14872. }
  14873. var fs$__13 = this.pushFunctionState_(kind$__12);
  14874. var m$__14 = this.parseMethod_(start, isStatic, functionKind, name, annotations);
  14875. this.popFunctionState_(fs$__13);
  14876. if (isDerivedConstructor) {
  14877. validateConstructor(m$__14, this.errorReporter_);
  14878. }
  14879. return m$__14;
  14880. }
  14881. return this.parsePropertyVariableDeclaration_(start, isStatic, name, annotations);
  14882. },
  14883. parseGetAccessor_: function(start, isStatic, annotations) {
  14884. var name = this.parsePropertyName_();
  14885. var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD);
  14886. this.eat_(OPEN_PAREN);
  14887. this.eat_(CLOSE_PAREN);
  14888. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14889. var body = this.parseFunctionBody_(null);
  14890. this.popFunctionState_(fs);
  14891. return new GetAccessor(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations, body);
  14892. },
  14893. parseSetAccessor_: function(start, isStatic, annotations) {
  14894. var name = this.parsePropertyName_();
  14895. var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD);
  14896. this.eat_(OPEN_PAREN);
  14897. var parameterList = this.parsePropertySetParameterList_();
  14898. this.eat_(CLOSE_PAREN);
  14899. var body = this.parseFunctionBody_(parameterList);
  14900. this.popFunctionState_(fs);
  14901. return new SetAccessor(this.getTreeLocation_(start), isStatic, name, parameterList, annotations, body);
  14902. },
  14903. peekPropertyDefinition_: function(type) {
  14904. return this.peekPropertyName_(type) || type === STAR && this.options_.propertyMethods && this.options_.generators || type === DOT_DOT_DOT && this.options_.spreadProperties;
  14905. },
  14906. peekPropertyName_: function(type) {
  14907. switch (type) {
  14908. case IDENTIFIER:
  14909. case STRING:
  14910. case NUMBER:
  14911. return true;
  14912. case OPEN_SQUARE:
  14913. return this.options_.computedPropertyNames;
  14914. default:
  14915. return peekToken().isKeyword();
  14916. }
  14917. },
  14918. peekPredefinedString_: function(string) {
  14919. var token = peekToken();
  14920. return token.type === IDENTIFIER && token.value === string;
  14921. },
  14922. parsePropertySetParameterList_: function() {
  14923. var start = this.getTreeStartLocation_();
  14924. var binding;
  14925. this.pushAnnotations_();
  14926. if (this.peekPattern_(peekType()))
  14927. binding = this.parseBindingPattern_();
  14928. else
  14929. binding = this.parseBindingIdentifier_();
  14930. var typeAnnotation = this.parseTypeAnnotationOpt_();
  14931. var parameter = new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, null), typeAnnotation, this.popAnnotations_());
  14932. return new FormalParameterList(parameter.location, [parameter]);
  14933. },
  14934. parsePrimaryExpressionStartingWithParen_: function() {
  14935. var start = this.getTreeStartLocation_();
  14936. this.eat_(OPEN_PAREN);
  14937. if (peek(FOR) && this.options_.generatorComprehension)
  14938. return this.parseGeneratorComprehension_(start);
  14939. return this.parseCoverFormals_(start);
  14940. },
  14941. parseSyntaxError_: function(message) {
  14942. var token = nextToken();
  14943. this.reportError_(token.location, message);
  14944. return new SyntaxErrorTree(token.location, token, message);
  14945. },
  14946. parseUnexpectedToken_: function() {
  14947. var token = arguments[0] !== (void 0) ? arguments[0] : peekToken();
  14948. if (token.type === NO_SUBSTITUTION_TEMPLATE) {
  14949. return this.parseSyntaxError_('Unexpected token `');
  14950. }
  14951. return this.parseSyntaxError_(("Unexpected token " + token));
  14952. },
  14953. parseUnexpectedReservedWord_: function(token) {
  14954. return this.parseSyntaxError_(("Unexpected reserved word " + token));
  14955. },
  14956. parseExpression_: function(allowIn) {
  14957. var coverInitializedNameCount = this.coverInitializedNameCount_;
  14958. var expression = this.parseExpressionAllowPattern_(allowIn);
  14959. this.ensureNoCoverInitializedNames_(expression, coverInitializedNameCount);
  14960. return expression;
  14961. },
  14962. parseExpression: function() {
  14963. var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT);
  14964. var expression = this.parseExpression_(ALLOW_IN);
  14965. this.popFunctionState_(fs);
  14966. return expression;
  14967. },
  14968. parseExpressionAllowPattern_: function(allowIn) {
  14969. var start = this.getTreeStartLocation_();
  14970. var expression = this.parseAssignmentExpression_(allowIn);
  14971. if (peek(COMMA)) {
  14972. var expressions = [expression];
  14973. while (this.eatIf_(COMMA)) {
  14974. expressions.push(this.parseAssignmentExpression_(allowIn));
  14975. }
  14976. return new CommaExpression(this.getTreeLocation_(start), expressions);
  14977. }
  14978. return expression;
  14979. },
  14980. parseAssignmentExpression_: function(allowIn) {
  14981. if (this.allowYield_ && peek(YIELD))
  14982. return this.parseYieldExpression_(allowIn);
  14983. var start = this.getTreeStartLocation_();
  14984. var validAsyncParen = false;
  14985. if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) {
  14986. var asyncToken = peekToken();
  14987. var maybeOpenParenToken = peekTokenLookahead();
  14988. validAsyncParen = maybeOpenParenToken.type === OPEN_PAREN && asyncToken.location.end.line === maybeOpenParenToken.location.start.line;
  14989. }
  14990. var left = this.parseConditional_(allowIn);
  14991. var type = peekType();
  14992. if (this.options_.asyncFunctions && left.type === IDENTIFIER_EXPRESSION && left.identifierToken.value === ASYNC && type === IDENTIFIER) {
  14993. if (peekTokenNoLineTerminator() !== null) {
  14994. var bindingIdentifier = this.parseBindingIdentifier_();
  14995. var asyncToken$__15 = left.identifierToken;
  14996. return this.parseArrowFunction_(start, bindingIdentifier, asyncToken$__15);
  14997. }
  14998. }
  14999. if (type === ARROW && peekTokenNoLineTerminator() !== null) {
  15000. if (left.type === COVER_FORMALS || left.type === IDENTIFIER_EXPRESSION)
  15001. return this.parseArrowFunction_(start, left, null);
  15002. if (validAsyncParen && left.type === CALL_EXPRESSION) {
  15003. var asyncToken$__16 = left.operand.identifierToken;
  15004. return this.parseArrowFunction_(start, left.args, asyncToken$__16);
  15005. }
  15006. }
  15007. left = this.coverFormalsToParenExpression_(left);
  15008. if (this.peekAssignmentOperator_(type)) {
  15009. if (type === EQUAL)
  15010. left = this.transformLeftHandSideExpression_(left);
  15011. this.validateAssignmentTarget_(left, 'assignment');
  15012. var operator = nextToken();
  15013. var right = this.parseAssignmentExpression_(allowIn);
  15014. return new BinaryExpression(this.getTreeLocation_(start), left, operator, right);
  15015. }
  15016. return left;
  15017. },
  15018. transformLeftHandSideExpression_: function(tree) {
  15019. switch (tree.type) {
  15020. case ARRAY_LITERAL:
  15021. case OBJECT_LITERAL:
  15022. resetScanner(tree.location.start.offset);
  15023. return this.parseAssignmentPattern_();
  15024. }
  15025. return tree;
  15026. },
  15027. peekAssignmentOperator_: function(type) {
  15028. return isAssignmentOperator(type);
  15029. },
  15030. parseConditional_: function(allowIn) {
  15031. var start = this.getTreeStartLocation_();
  15032. var condition = this.parseBinaryExpression_(allowIn);
  15033. if (this.eatIf_(QUESTION)) {
  15034. condition = this.toPrimaryExpression_(condition);
  15035. var left = this.parseAssignmentExpression_(ALLOW_IN);
  15036. this.eat_(COLON);
  15037. var right = this.parseAssignmentExpression_(allowIn);
  15038. return new ConditionalExpression(this.getTreeLocation_(start), condition, left, right);
  15039. }
  15040. return condition;
  15041. },
  15042. getPrecedence_: function(type, allowIn) {
  15043. switch (type) {
  15044. case OR:
  15045. return 1;
  15046. case AND:
  15047. return 2;
  15048. case BAR:
  15049. return 3;
  15050. case CARET:
  15051. return 4;
  15052. case AMPERSAND:
  15053. return 5;
  15054. case EQUAL_EQUAL:
  15055. case EQUAL_EQUAL_EQUAL:
  15056. case NOT_EQUAL:
  15057. case NOT_EQUAL_EQUAL:
  15058. return 6;
  15059. case CLOSE_ANGLE:
  15060. case GREATER_EQUAL:
  15061. case INSTANCEOF:
  15062. case LESS_EQUAL:
  15063. case OPEN_ANGLE:
  15064. return 7;
  15065. case IN:
  15066. return allowIn ? 7 : 0;
  15067. case LEFT_SHIFT:
  15068. case RIGHT_SHIFT:
  15069. case UNSIGNED_RIGHT_SHIFT:
  15070. return 8;
  15071. case MINUS:
  15072. case PLUS:
  15073. return 9;
  15074. case SLASH:
  15075. case STAR:
  15076. case PERCENT:
  15077. return 10;
  15078. case STAR_STAR:
  15079. return this.options_.exponentiation ? 11 : 0;
  15080. default:
  15081. return 0;
  15082. }
  15083. },
  15084. parseBinaryExpression_: function(allowIn) {
  15085. var start = this.getTreeStartLocation_();
  15086. var left = this.parseUnaryExpression_();
  15087. return this.parseBinaryExpressionHelper_(start, left, -1, allowIn);
  15088. },
  15089. parseBinaryExpressionHelper_: function(start, left, minPrec, allowIn) {
  15090. var type = peekType();
  15091. var prec = this.getPrecedence_(type, allowIn);
  15092. if (prec === 0) {
  15093. return left;
  15094. }
  15095. var leftToRight = type !== STAR_STAR;
  15096. if (leftToRight ? prec > minPrec : prec >= minPrec) {
  15097. var token = nextToken();
  15098. var rightStart = this.getTreeStartLocation_();
  15099. var rightUnary = this.parseUnaryExpression_();
  15100. var right = this.parseBinaryExpressionHelper_(rightStart, rightUnary, prec, allowIn);
  15101. left = this.toPrimaryExpression_(left);
  15102. right = this.toPrimaryExpression_(right);
  15103. var node = new BinaryExpression(this.getTreeLocation_(start), left, token, right);
  15104. return this.parseBinaryExpressionHelper_(start, node, minPrec, allowIn);
  15105. }
  15106. return left;
  15107. },
  15108. parseUnaryExpression_: function() {
  15109. var start = this.getTreeStartLocation_();
  15110. if (this.allowAwait_ && this.peekPredefinedString_(AWAIT)) {
  15111. this.eatId_();
  15112. var operand;
  15113. if (this.allowYield_ && peek(YIELD)) {
  15114. operand = this.parseYieldExpression_(ALLOW_IN);
  15115. } else {
  15116. operand = this.parseUnaryExpression_();
  15117. operand = this.toPrimaryExpression_(operand);
  15118. }
  15119. return new AwaitExpression(this.getTreeLocation_(start), operand);
  15120. }
  15121. if (this.peekUnaryOperator_(peekType())) {
  15122. var operator = nextToken();
  15123. var operand$__17 = this.parseUnaryExpression_();
  15124. operand$__17 = this.toPrimaryExpression_(operand$__17);
  15125. if (operand$__17.type !== SYNTAX_ERROR_TREE) {
  15126. switch (operator.type) {
  15127. case PLUS_PLUS:
  15128. case MINUS_MINUS:
  15129. this.validateAssignmentTarget_(operand$__17, 'prefix operation');
  15130. }
  15131. }
  15132. return new UnaryExpression(this.getTreeLocation_(start), operator, operand$__17);
  15133. }
  15134. return this.parsePostfixExpression_();
  15135. },
  15136. peekUnaryOperator_: function(type) {
  15137. switch (type) {
  15138. case DELETE:
  15139. case VOID:
  15140. case TYPEOF:
  15141. case PLUS_PLUS:
  15142. case MINUS_MINUS:
  15143. case PLUS:
  15144. case MINUS:
  15145. case TILDE:
  15146. case BANG:
  15147. return true;
  15148. default:
  15149. return false;
  15150. }
  15151. },
  15152. parsePostfixExpression_: function() {
  15153. var start = this.getTreeStartLocation_();
  15154. var operand = this.parseLeftHandSideExpression_();
  15155. while (this.peekPostfixOperator_(peekType())) {
  15156. operand = this.toPrimaryExpression_(operand);
  15157. var operator = nextToken();
  15158. this.validateAssignmentTarget_(operand, 'postfix operation');
  15159. operand = new PostfixExpression(this.getTreeLocation_(start), operand, operator);
  15160. }
  15161. return operand;
  15162. },
  15163. peekPostfixOperator_: function(type) {
  15164. switch (type) {
  15165. case PLUS_PLUS:
  15166. case MINUS_MINUS:
  15167. {
  15168. var token = peekTokenNoLineTerminator();
  15169. return token !== null;
  15170. }
  15171. }
  15172. return false;
  15173. },
  15174. parseLeftHandSideExpression_: function() {
  15175. var start = this.getTreeStartLocation_();
  15176. var operand = this.parseNewExpression_();
  15177. if (!(operand instanceof NewExpression) || operand.args !== null) {
  15178. loop: while (true) {
  15179. switch (peekType()) {
  15180. case OPEN_PAREN:
  15181. operand = this.toPrimaryExpression_(operand);
  15182. operand = this.parseCallExpression_(start, operand);
  15183. break;
  15184. case OPEN_SQUARE:
  15185. operand = this.toPrimaryExpression_(operand);
  15186. operand = this.parseMemberLookupExpression_(start, operand);
  15187. break;
  15188. case PERIOD:
  15189. operand = this.toPrimaryExpression_(operand);
  15190. operand = this.parseMemberExpression_(start, operand);
  15191. break;
  15192. case NO_SUBSTITUTION_TEMPLATE:
  15193. case TEMPLATE_HEAD:
  15194. if (!this.options_.templateLiterals)
  15195. break loop;
  15196. operand = this.toPrimaryExpression_(operand);
  15197. if (this.options_.templateLiterals) {
  15198. operand = this.parseTemplateLiteral_(operand);
  15199. }
  15200. break;
  15201. default:
  15202. break loop;
  15203. }
  15204. }
  15205. }
  15206. return operand;
  15207. },
  15208. parseMemberExpressionNoNew_: function() {
  15209. var start = this.getTreeStartLocation_();
  15210. var operand;
  15211. if (peekType() === FUNCTION) {
  15212. operand = this.parseFunctionExpression_();
  15213. } else {
  15214. operand = this.parsePrimaryExpression_();
  15215. }
  15216. loop: while (true) {
  15217. switch (peekType()) {
  15218. case OPEN_SQUARE:
  15219. operand = this.toPrimaryExpression_(operand);
  15220. operand = this.parseMemberLookupExpression_(start, operand);
  15221. break;
  15222. case PERIOD:
  15223. operand = this.toPrimaryExpression_(operand);
  15224. operand = this.parseMemberExpression_(start, operand);
  15225. break;
  15226. case NO_SUBSTITUTION_TEMPLATE:
  15227. case TEMPLATE_HEAD:
  15228. if (!this.options_.templateLiterals)
  15229. break loop;
  15230. operand = this.toPrimaryExpression_(operand);
  15231. operand = this.parseTemplateLiteral_(operand);
  15232. break;
  15233. default:
  15234. break loop;
  15235. }
  15236. }
  15237. return operand;
  15238. },
  15239. parseMemberExpression_: function(start, operand) {
  15240. this.eat_(PERIOD);
  15241. var name = this.eatIdName_();
  15242. return new MemberExpression(this.getTreeLocation_(start), operand, name);
  15243. },
  15244. parseMemberLookupExpression_: function(start, operand) {
  15245. this.eat_(OPEN_SQUARE);
  15246. var member = this.parseExpression_(ALLOW_IN);
  15247. this.eat_(CLOSE_SQUARE);
  15248. return new MemberLookupExpression(this.getTreeLocation_(start), operand, member);
  15249. },
  15250. parseCallExpression_: function(start, operand) {
  15251. var args = this.parseArguments_();
  15252. return new CallExpression(this.getTreeLocation_(start), operand, args);
  15253. },
  15254. parseNewExpression_: function() {
  15255. var operand,
  15256. start;
  15257. switch (peekType()) {
  15258. case NEW:
  15259. {
  15260. start = this.getTreeStartLocation_();
  15261. this.eat_(NEW);
  15262. if (peek(SUPER)) {
  15263. operand = this.parseSuperExpression_(true);
  15264. } else {
  15265. operand = this.toPrimaryExpression_(this.parseNewExpression_());
  15266. }
  15267. var args = null;
  15268. if (peek(OPEN_PAREN)) {
  15269. args = this.parseArguments_();
  15270. }
  15271. return new NewExpression(this.getTreeLocation_(start), operand, args);
  15272. }
  15273. case SUPER:
  15274. return this.parseSuperExpression_(false);
  15275. default:
  15276. return this.parseMemberExpressionNoNew_();
  15277. }
  15278. },
  15279. parseArguments_: function() {
  15280. var start = this.getTreeStartLocation_();
  15281. var args = [];
  15282. this.eat_(OPEN_PAREN);
  15283. if (!peek(CLOSE_PAREN)) {
  15284. args.push(this.parseArgument_());
  15285. while (this.eatIf_(COMMA)) {
  15286. args.push(this.parseArgument_());
  15287. }
  15288. }
  15289. this.eat_(CLOSE_PAREN);
  15290. return new ArgumentList(this.getTreeLocation_(start), args);
  15291. },
  15292. parseArgument_: function() {
  15293. if (this.peekSpread_(peekType()))
  15294. return this.parseSpreadExpression_();
  15295. return this.parseAssignmentExpression_(ALLOW_IN);
  15296. },
  15297. parseArrowFunction_: function(start, tree, asyncToken) {
  15298. var $__3 = this;
  15299. var formals;
  15300. var kind = FUNCTION_STATE_ARROW;
  15301. if (asyncToken && asyncToken.value === ASYNC) {
  15302. kind |= FUNCTION_STATE_ASYNC;
  15303. }
  15304. var fs = this.pushFunctionState_(kind);
  15305. var makeFormals = function(tree) {
  15306. return new FormalParameterList($__3.getTreeLocation_(start), [new FormalParameter(tree.location, new BindingElement(tree.location, tree, null), null, [])]);
  15307. };
  15308. switch (tree.type) {
  15309. case IDENTIFIER_EXPRESSION:
  15310. formals = makeFormals(new BindingIdentifier(tree.location, tree.identifierToken));
  15311. break;
  15312. case BINDING_IDENTIFIER:
  15313. formals = makeFormals(tree);
  15314. break;
  15315. case FORMAL_PARAMETER_LIST:
  15316. formals = tree;
  15317. break;
  15318. default:
  15319. formals = this.toFormalParameters_(start, tree, asyncToken);
  15320. }
  15321. this.eat_(ARROW);
  15322. var body = this.parseConciseBody_(formals);
  15323. this.popFunctionState_(fs);
  15324. return new ArrowFunction(this.getTreeLocation_(start), asyncToken, formals, body);
  15325. },
  15326. parseCoverFormals_: function(start) {
  15327. var expressions = [];
  15328. if (!peek(CLOSE_PAREN)) {
  15329. do {
  15330. var type = peekType();
  15331. if (this.peekRest_(type)) {
  15332. expressions.push(this.parseRestParameter_());
  15333. break;
  15334. } else {
  15335. expressions.push(this.parseAssignmentExpression_(ALLOW_IN));
  15336. }
  15337. if (this.eatIf_(COMMA))
  15338. continue;
  15339. } while (!peek(CLOSE_PAREN) && !isAtEnd());
  15340. }
  15341. this.eat_(CLOSE_PAREN);
  15342. return new CoverFormals(this.getTreeLocation_(start), expressions);
  15343. },
  15344. ensureNoCoverInitializedNames_: function(tree, coverInitializedNameCount) {
  15345. if (coverInitializedNameCount === this.coverInitializedNameCount_)
  15346. return;
  15347. var finder = new ValidateObjectLiteral();
  15348. finder.visitAny(tree);
  15349. if (finder.found) {
  15350. var token = finder.errorToken;
  15351. this.reportError_(token.location, ("Unexpected token " + token));
  15352. }
  15353. },
  15354. toPrimaryExpression_: function(tree) {
  15355. if (tree.type === COVER_FORMALS)
  15356. return this.coverFormalsToParenExpression_(tree);
  15357. return tree;
  15358. },
  15359. validateCoverFormalsAsParenExpression_: function(tree) {
  15360. for (var i = 0; i < tree.expressions.length; i++) {
  15361. if (tree.expressions[i].type === REST_PARAMETER) {
  15362. var token = new Token(DOT_DOT_DOT, tree.expressions[i].location);
  15363. this.reportError_(token.location, ("Unexpected token " + token));
  15364. return;
  15365. }
  15366. }
  15367. },
  15368. coverFormalsToParenExpression_: function(tree) {
  15369. if (tree.type === COVER_FORMALS) {
  15370. var expressions = tree.expressions;
  15371. if (expressions.length === 0) {
  15372. var message = 'Unexpected token )';
  15373. this.reportError_(tree.location, message);
  15374. } else {
  15375. this.validateCoverFormalsAsParenExpression_(tree);
  15376. var expression;
  15377. if (expressions.length > 1)
  15378. expression = new CommaExpression(expressions[0].location, expressions);
  15379. else
  15380. expression = expressions[0];
  15381. return new ParenExpression(tree.location, expression);
  15382. }
  15383. }
  15384. return tree;
  15385. },
  15386. toFormalParameters_: function(start, tree, asyncToken) {
  15387. resetScanner(start.offset);
  15388. return this.parseArrowFormalParameters_(asyncToken);
  15389. },
  15390. parseArrowFormalParameters_: function(asyncToken) {
  15391. if (asyncToken)
  15392. this.eat_(IDENTIFIER);
  15393. this.eat_(OPEN_PAREN);
  15394. var parameters = this.parseFormalParameters_();
  15395. this.eat_(CLOSE_PAREN);
  15396. return parameters;
  15397. },
  15398. peekArrow_: function(type) {
  15399. return type === ARROW && this.options_.arrowFunctions;
  15400. },
  15401. parseConciseBody_: function(params) {
  15402. if (peek(OPEN_CURLY))
  15403. return this.parseFunctionBody_(params);
  15404. validateParameters(params, this.strictMode_, this.errorReporter_);
  15405. return this.parseAssignmentExpression_(ALLOW_IN);
  15406. },
  15407. parseGeneratorComprehension_: function(start) {
  15408. var comprehensionList = this.parseComprehensionList_();
  15409. var expression = this.parseAssignmentExpression_(ALLOW_IN);
  15410. this.eat_(CLOSE_PAREN);
  15411. return new GeneratorComprehension(this.getTreeLocation_(start), comprehensionList, expression);
  15412. },
  15413. parseForBinding_: function() {
  15414. if (this.peekPattern_(peekType()))
  15415. return this.parseBindingPattern_();
  15416. return this.parseBindingIdentifier_();
  15417. },
  15418. peekPattern_: function(type) {
  15419. return this.options_.destructuring && (this.peekObjectPattern_(type) || this.peekArrayPattern_(type));
  15420. },
  15421. peekArrayPattern_: function(type) {
  15422. return type === OPEN_SQUARE;
  15423. },
  15424. peekObjectPattern_: function(type) {
  15425. return type === OPEN_CURLY;
  15426. },
  15427. parseBindingPattern_: function() {
  15428. return this.parsePattern_(true);
  15429. },
  15430. parsePattern_: function(useBinding) {
  15431. if (this.peekArrayPattern_(peekType()))
  15432. return this.parseArrayPattern_(useBinding);
  15433. return this.parseObjectPattern_(useBinding);
  15434. },
  15435. parseArrayBindingPattern_: function() {
  15436. return this.parseArrayPattern_(true);
  15437. },
  15438. parsePatternElement_: function(useBinding) {
  15439. return useBinding ? this.parseBindingElement_() : this.parseAssignmentElement_();
  15440. },
  15441. parsePatternRestElement_: function(useBinding) {
  15442. return useBinding ? this.parseBindingRestElement_() : this.parseAssignmentRestElement_();
  15443. },
  15444. parseArrayPattern_: function(useBinding) {
  15445. var start = this.getTreeStartLocation_();
  15446. var elements = [];
  15447. this.eat_(OPEN_SQUARE);
  15448. while (true) {
  15449. var type = peekType();
  15450. if (type === COMMA) {
  15451. elements.push(null);
  15452. } else if (this.peekSpread_(type)) {
  15453. elements.push(this.parsePatternRestElement_(useBinding));
  15454. break;
  15455. } else if (type === CLOSE_SQUARE || type === END_OF_FILE) {
  15456. break;
  15457. } else {
  15458. elements.push(this.parsePatternElement_(useBinding));
  15459. }
  15460. type = peekType();
  15461. if (type !== CLOSE_SQUARE) {
  15462. this.eat_(COMMA);
  15463. }
  15464. }
  15465. this.eat_(CLOSE_SQUARE);
  15466. return new ArrayPattern(this.getTreeLocation_(start), elements);
  15467. },
  15468. parseBindingElementList_: function(elements) {
  15469. this.parseElisionOpt_(elements);
  15470. elements.push(this.parseBindingElement_());
  15471. while (this.eatIf_(COMMA)) {
  15472. this.parseElisionOpt_(elements);
  15473. elements.push(this.parseBindingElement_());
  15474. }
  15475. },
  15476. parseElisionOpt_: function(elements) {
  15477. while (this.eatIf_(COMMA)) {
  15478. elements.push(null);
  15479. }
  15480. },
  15481. peekBindingElement_: function(type) {
  15482. return this.peekBindingIdentifier_(type) || this.peekPattern_(type);
  15483. },
  15484. parseBindingElement_: function() {
  15485. var start = this.getTreeStartLocation_();
  15486. var binding = this.parseBindingElementBinding_();
  15487. var initializer = this.parseBindingElementInitializer_(INITIALIZER_OPTIONAL);
  15488. return new BindingElement(this.getTreeLocation_(start), binding, initializer);
  15489. },
  15490. parseBindingElementBinding_: function() {
  15491. if (this.peekPattern_(peekType()))
  15492. return this.parseBindingPattern_();
  15493. return this.parseBindingIdentifier_();
  15494. },
  15495. parseBindingElementInitializer_: function(initializerRequired) {
  15496. if (peek(EQUAL) || initializerRequired) {
  15497. return this.parseInitializer_(ALLOW_IN);
  15498. }
  15499. return null;
  15500. },
  15501. parseBindingRestElement_: function() {
  15502. var start = this.getTreeStartLocation_();
  15503. this.eat_(DOT_DOT_DOT);
  15504. var identifier = this.parseBindingIdentifier_();
  15505. return new SpreadPatternElement(this.getTreeLocation_(start), identifier);
  15506. },
  15507. parseObjectPattern_: function(useBinding) {
  15508. var start = this.getTreeStartLocation_();
  15509. var elements = [];
  15510. this.eat_(OPEN_CURLY);
  15511. var type;
  15512. while ((type = peekType()) !== CLOSE_CURLY && type !== END_OF_FILE) {
  15513. elements.push(this.parsePatternProperty_(useBinding));
  15514. if (!this.eatIf_(COMMA))
  15515. break;
  15516. }
  15517. this.eat_(CLOSE_CURLY);
  15518. return new ObjectPattern(this.getTreeLocation_(start), elements);
  15519. },
  15520. parsePatternProperty_: function(useBinding) {
  15521. var start = this.getTreeStartLocation_();
  15522. var name = this.parsePropertyName_();
  15523. var requireColon = name.type !== LITERAL_PROPERTY_NAME || !name.literalToken.isStrictKeyword() && name.literalToken.type !== IDENTIFIER;
  15524. if (requireColon || peek(COLON)) {
  15525. this.eat_(COLON);
  15526. var element = this.parsePatternElement_(useBinding);
  15527. return new ObjectPatternField(this.getTreeLocation_(start), name, element);
  15528. }
  15529. var token = name.literalToken;
  15530. if (this.strictMode_ && token.isStrictKeyword())
  15531. this.reportReservedIdentifier_(token);
  15532. if (useBinding) {
  15533. var binding = new BindingIdentifier(name.location, token);
  15534. var initializer$__18 = this.parseInitializerOpt_(ALLOW_IN);
  15535. return new BindingElement(this.getTreeLocation_(start), binding, initializer$__18);
  15536. }
  15537. var assignment = new IdentifierExpression(name.location, token);
  15538. var initializer = this.parseInitializerOpt_(ALLOW_IN);
  15539. return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer);
  15540. },
  15541. parseAssignmentPattern_: function() {
  15542. return this.parsePattern_(false);
  15543. },
  15544. parseArrayAssignmentPattern_: function() {
  15545. return this.parseArrayPattern_(false);
  15546. },
  15547. parseAssignmentElement_: function() {
  15548. var start = this.getTreeStartLocation_();
  15549. var assignment = this.parseDestructuringAssignmentTarget_();
  15550. var initializer = this.parseInitializerOpt_(ALLOW_IN);
  15551. return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer);
  15552. },
  15553. parseDestructuringAssignmentTarget_: function() {
  15554. switch (peekType()) {
  15555. case OPEN_SQUARE:
  15556. return this.parseArrayAssignmentPattern_();
  15557. case OPEN_CURLY:
  15558. return this.parseObjectAssignmentPattern_();
  15559. }
  15560. var expression = this.parseLeftHandSideExpression_();
  15561. expression = this.coverFormalsToParenExpression_(expression);
  15562. this.validateAssignmentTarget_(expression, 'assignment');
  15563. return expression;
  15564. },
  15565. parseAssignmentRestElement_: function() {
  15566. var start = this.getTreeStartLocation_();
  15567. this.eat_(DOT_DOT_DOT);
  15568. var id = this.parseDestructuringAssignmentTarget_();
  15569. return new SpreadPatternElement(this.getTreeLocation_(start), id);
  15570. },
  15571. parseObjectAssignmentPattern_: function() {
  15572. return this.parseObjectPattern_(false);
  15573. },
  15574. parseAssignmentProperty_: function() {
  15575. return this.parsePatternProperty_(false);
  15576. },
  15577. parseTemplateLiteral_: function(operand) {
  15578. var start = operand ? operand.location.start : this.getTreeStartLocation_();
  15579. var token = nextToken();
  15580. var elements = [new TemplateLiteralPortion(token.location, token)];
  15581. if (token.type === NO_SUBSTITUTION_TEMPLATE) {
  15582. return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements);
  15583. }
  15584. var expression = this.parseExpression_(ALLOW_IN);
  15585. elements.push(new TemplateSubstitution(expression.location, expression));
  15586. while (expression.type !== SYNTAX_ERROR_TREE) {
  15587. token = nextTemplateLiteralToken();
  15588. if (token.type === ERROR || token.type === END_OF_FILE)
  15589. break;
  15590. elements.push(new TemplateLiteralPortion(token.location, token));
  15591. if (token.type === TEMPLATE_TAIL)
  15592. break;
  15593. expression = this.parseExpression_(ALLOW_IN);
  15594. elements.push(new TemplateSubstitution(expression.location, expression));
  15595. }
  15596. return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements);
  15597. },
  15598. parseTypeAnnotationOpt_: function() {
  15599. if (this.options_.types && this.eatOpt_(COLON)) {
  15600. return this.parseType_();
  15601. }
  15602. return null;
  15603. },
  15604. parseType_: function() {
  15605. switch (peekType()) {
  15606. case NEW:
  15607. return this.parseConstructorType_();
  15608. case OPEN_PAREN:
  15609. case OPEN_ANGLE:
  15610. return this.parseFunctionType_();
  15611. }
  15612. var start = this.getTreeStartLocation_();
  15613. var elementType = this.parsePrimaryType_();
  15614. return this.parseUnionTypeSuffix_(start, elementType);
  15615. },
  15616. parsePrimaryType_: function() {
  15617. var start = this.getTreeStartLocation_();
  15618. var elementType,
  15619. token;
  15620. switch (peekType()) {
  15621. case VOID:
  15622. token = nextToken();
  15623. elementType = new PredefinedType(this.getTreeLocation_(start), token);
  15624. break;
  15625. case IDENTIFIER:
  15626. switch (peekToken().value) {
  15627. case 'any':
  15628. case 'boolean':
  15629. case 'number':
  15630. case 'string':
  15631. case 'symbol':
  15632. token = nextToken();
  15633. elementType = new PredefinedType(this.getTreeLocation_(start), token);
  15634. break;
  15635. default:
  15636. elementType = this.parseTypeReference_();
  15637. }
  15638. break;
  15639. case TYPEOF:
  15640. elementType = this.parseTypeQuery_(start);
  15641. break;
  15642. case OPEN_CURLY:
  15643. elementType = this.parseObjectType_();
  15644. break;
  15645. default:
  15646. return this.parseUnexpectedToken_();
  15647. }
  15648. return this.parseArrayTypeSuffix_(start, elementType);
  15649. },
  15650. parseTypeReference_: function() {
  15651. var start = this.getTreeStartLocation_();
  15652. var typeName = this.parseTypeName_();
  15653. var args = null;
  15654. if (peek(OPEN_ANGLE)) {
  15655. var args$__19 = this.parseTypeArguments_();
  15656. return new TypeReference(this.getTreeLocation_(start), typeName, args$__19);
  15657. }
  15658. return typeName;
  15659. },
  15660. parseUnionTypeSuffix_: function(start, elementType) {
  15661. if (peek(BAR)) {
  15662. var types = [elementType];
  15663. this.eat_(BAR);
  15664. while (true) {
  15665. types.push(this.parsePrimaryType_());
  15666. if (!this.eatIf_(BAR)) {
  15667. break;
  15668. }
  15669. }
  15670. return new UnionType(this.getTreeLocation_(start), types);
  15671. }
  15672. return elementType;
  15673. },
  15674. parseArrayTypeSuffix_: function(start, elementType) {
  15675. var token = peekTokenNoLineTerminator();
  15676. if (token && token.type === OPEN_SQUARE) {
  15677. this.eat_(OPEN_SQUARE);
  15678. this.eat_(CLOSE_SQUARE);
  15679. elementType = new ArrayType(this.getTreeLocation_(start), elementType);
  15680. return this.parseArrayTypeSuffix_(start, elementType);
  15681. }
  15682. return elementType;
  15683. },
  15684. parseTypeArguments_: function() {
  15685. var start = this.getTreeStartLocation_();
  15686. this.eat_(OPEN_ANGLE);
  15687. var args = [this.parseType_()];
  15688. while (peek(COMMA)) {
  15689. this.eat_(COMMA);
  15690. args.push(this.parseType_());
  15691. }
  15692. var token = nextCloseAngle();
  15693. if (token.type !== CLOSE_ANGLE) {
  15694. return this.parseUnexpectedToken_(token);
  15695. }
  15696. return new TypeArguments(this.getTreeLocation_(start), args);
  15697. },
  15698. parseConstructorType_: function() {
  15699. var start = this.getTreeStartLocation_();
  15700. this.eat_(NEW);
  15701. var typeParameters = this.parseTypeParametersOpt_();
  15702. this.eat_(OPEN_PAREN);
  15703. var parameterList = this.parseFormalParameters_();
  15704. this.eat_(CLOSE_PAREN);
  15705. this.eat_(ARROW);
  15706. var returnType = this.parseType_();
  15707. return new ConstructorType(this.getTreeLocation_(start), typeParameters, parameterList, returnType);
  15708. },
  15709. parseObjectType_: function() {
  15710. var start = this.getTreeStartLocation_();
  15711. var typeMembers = [];
  15712. this.eat_(OPEN_CURLY);
  15713. var type;
  15714. while (this.peekTypeMember_(type = peekType())) {
  15715. typeMembers.push(this.parseTypeMember_(type));
  15716. if (!this.eatIf_(SEMI_COLON)) {
  15717. break;
  15718. }
  15719. }
  15720. this.eat_(CLOSE_CURLY);
  15721. return new ObjectType(this.getTreeLocation_(start), typeMembers);
  15722. },
  15723. peekTypeMember_: function(type) {
  15724. switch (type) {
  15725. case NEW:
  15726. case OPEN_PAREN:
  15727. case OPEN_ANGLE:
  15728. case OPEN_SQUARE:
  15729. case IDENTIFIER:
  15730. case STRING:
  15731. case NUMBER:
  15732. return true;
  15733. default:
  15734. return peekToken().isKeyword();
  15735. }
  15736. },
  15737. parseTypeMember_: function(type) {
  15738. switch (type) {
  15739. case NEW:
  15740. return this.parseConstructSignature_();
  15741. case OPEN_PAREN:
  15742. case OPEN_ANGLE:
  15743. return this.parseCallSignature_();
  15744. case OPEN_SQUARE:
  15745. return this.parseIndexSignature_();
  15746. }
  15747. var start = this.getTreeStartLocation_();
  15748. var propertyName = this.parseLiteralPropertyName_();
  15749. var isOpt = this.eatIf_(QUESTION);
  15750. type = peekType();
  15751. if (type === OPEN_ANGLE || type === OPEN_PAREN) {
  15752. var callSignature = this.parseCallSignature_();
  15753. return new MethodSignature(this.getTreeLocation_(start), propertyName, isOpt, callSignature);
  15754. }
  15755. var typeAnnotation = this.parseTypeAnnotationOpt_();
  15756. return new PropertySignature(this.getTreeLocation_(start), propertyName, isOpt, typeAnnotation);
  15757. },
  15758. parseCallSignature_: function() {
  15759. var start = this.getTreeStartLocation_();
  15760. var typeParameters = this.parseTypeParametersOpt_();
  15761. this.eat_(OPEN_PAREN);
  15762. var parameterList = this.parseFormalParameters_();
  15763. this.eat_(CLOSE_PAREN);
  15764. var returnType = this.parseTypeAnnotationOpt_();
  15765. return new CallSignature(this.getTreeLocation_(start), typeParameters, parameterList, returnType);
  15766. },
  15767. parseConstructSignature_: function() {
  15768. var start = this.getTreeStartLocation_();
  15769. this.eat_(NEW);
  15770. var typeParameters = this.parseTypeParametersOpt_();
  15771. this.eat_(OPEN_PAREN);
  15772. var parameterList = this.parseFormalParameters_();
  15773. this.eat_(CLOSE_PAREN);
  15774. var returnType = this.parseTypeAnnotationOpt_();
  15775. return new ConstructSignature(this.getTreeLocation_(start), typeParameters, parameterList, returnType);
  15776. },
  15777. parseIndexSignature_: function() {
  15778. var start = this.getTreeStartLocation_();
  15779. this.eat_(OPEN_SQUARE);
  15780. var id = this.eatId_();
  15781. this.eat_(COLON);
  15782. var typeName;
  15783. var typeStart = this.getTreeStartLocation_();
  15784. if (this.peekPredefinedString_('string')) {
  15785. typeName = this.eatId_('string');
  15786. } else {
  15787. typeName = this.eatId_('number');
  15788. }
  15789. var indexType = new PredefinedType(this.getTreeLocation_(typeStart), typeName);
  15790. this.eat_(CLOSE_SQUARE);
  15791. this.eat_(COLON);
  15792. var typeAnnotation = this.parseType_();
  15793. return new IndexSignature(this.getTreeLocation_(start), id, indexType, typeAnnotation);
  15794. },
  15795. parseFunctionType_: function() {
  15796. var start = this.getTreeStartLocation_();
  15797. var typeParameters = this.parseTypeParametersOpt_();
  15798. this.eat_(OPEN_PAREN);
  15799. var parameterList = this.parseFormalParameters_();
  15800. this.eat_(CLOSE_PAREN);
  15801. this.eat_(ARROW);
  15802. var returnType = this.parseType_();
  15803. return new FunctionType(this.getTreeLocation_(start), typeParameters, parameterList, returnType);
  15804. },
  15805. parseTypeQuery_: function(start) {
  15806. throw 'NYI';
  15807. },
  15808. peekTypeParameters_: function() {
  15809. return peek(OPEN_ANGLE);
  15810. },
  15811. parseTypeParametersOpt_: function() {
  15812. if (peek(OPEN_ANGLE)) {
  15813. return this.parseTypeParameters_();
  15814. }
  15815. return null;
  15816. },
  15817. parseTypeParameters_: function() {
  15818. var start = this.getTreeStartLocation_();
  15819. this.eat_(OPEN_ANGLE);
  15820. var parameters = [this.parseTypeParameter_()];
  15821. while (peek(COMMA)) {
  15822. this.eat_(COMMA);
  15823. parameters.push(this.parseTypeParameter_());
  15824. }
  15825. this.eat_(CLOSE_ANGLE);
  15826. return new TypeParameters(this.getTreeLocation_(start), parameters);
  15827. },
  15828. parseTypeParameter_: function() {
  15829. var start = this.getTreeStartLocation_();
  15830. var id = this.eatId_();
  15831. var extendsType = null;
  15832. if (this.eatIf_(EXTENDS)) {
  15833. extendsType = this.parseType_();
  15834. }
  15835. return new TypeParameter(this.getTreeLocation_(start), id, extendsType);
  15836. },
  15837. parseNamedOrPredefinedType_: function() {
  15838. var start = this.getTreeStartLocation_();
  15839. switch (peekToken().value) {
  15840. case 'any':
  15841. case 'number':
  15842. case 'boolean':
  15843. case 'string':
  15844. {
  15845. var token = nextToken();
  15846. return new PredefinedType(this.getTreeLocation_(start), token);
  15847. }
  15848. default:
  15849. return this.parseTypeName_();
  15850. }
  15851. },
  15852. parseTypeName_: function() {
  15853. var start = this.getTreeStartLocation_();
  15854. var id = this.eatId_();
  15855. var typeName = new TypeName(this.getTreeLocation_(start), null, id);
  15856. while (this.eatIf_(PERIOD)) {
  15857. var memberName = this.eatIdName_();
  15858. typeName = new TypeName(this.getTreeLocation_(start), typeName, memberName);
  15859. }
  15860. return typeName;
  15861. },
  15862. parseInterfaceDeclaration_: function() {
  15863. var start = this.getTreeStartLocation_();
  15864. this.eat_(INTERFACE);
  15865. var name = this.eatId_();
  15866. var typeParameters = this.parseTypeParametersOpt_();
  15867. var extendsClause;
  15868. if (this.eatIf_(EXTENDS)) {
  15869. extendsClause = this.parseInterfaceExtendsClause_();
  15870. } else {
  15871. extendsClause = [];
  15872. }
  15873. var objectType = this.parseObjectType_();
  15874. return new InterfaceDeclaration(this.getTreeLocation_(start), name, typeParameters, extendsClause, objectType);
  15875. },
  15876. parseInterfaceExtendsClause_: function() {
  15877. var result = [this.parseTypeReference_()];
  15878. while (this.eatIf_(COMMA)) {
  15879. result.push(this.parseTypeReference_());
  15880. }
  15881. return result;
  15882. },
  15883. parseAnnotatedDeclarations_: function(parsingModuleItem) {
  15884. this.pushAnnotations_();
  15885. var declaration;
  15886. var type = peekType();
  15887. if (parsingModuleItem) {
  15888. declaration = this.parseModuleItem_(type);
  15889. } else {
  15890. declaration = this.parseStatementListItem_(type);
  15891. }
  15892. if (this.annotations_.length > 0) {
  15893. this.reportError_(this.annotations_[0].location, 'Unsupported annotated expression');
  15894. }
  15895. return declaration;
  15896. },
  15897. parseAnnotations_: function() {
  15898. var annotations = [];
  15899. while (this.eatIf_(AT)) {
  15900. annotations.push(this.parseAnnotation_());
  15901. }
  15902. return annotations;
  15903. },
  15904. pushAnnotations_: function() {
  15905. this.annotations_ = this.parseAnnotations_();
  15906. },
  15907. popAnnotations_: function() {
  15908. var annotations = this.annotations_;
  15909. this.annotations_ = [];
  15910. return annotations;
  15911. },
  15912. parseAnnotation_: function() {
  15913. var start = this.getTreeStartLocation_();
  15914. var expression = this.parseMemberExpressionNoNew_();
  15915. var args = null;
  15916. if (peek(OPEN_PAREN))
  15917. args = this.parseArguments_();
  15918. return new Annotation(this.getTreeLocation_(start), expression, args);
  15919. },
  15920. parseTypeAliasDeclaration_: function() {
  15921. var start = this.getTreeStartLocation_();
  15922. this.eatId_(TYPE);
  15923. var name = this.eatId_();
  15924. this.eat_(EQUAL);
  15925. var type = this.parseType_();
  15926. this.eatPossibleImplicitSemiColon_();
  15927. return new TypeAliasDeclaration(this.getTreeLocation_(start), name, type);
  15928. },
  15929. parseJsxElement_: function() {
  15930. var token = this.eatJsx_(OPEN_ANGLE);
  15931. return this.parseJsxElementContinuation_(token.location.start);
  15932. },
  15933. parseJsxElementContinuation_: function(start) {
  15934. var name = this.parseJsxElementName_();
  15935. var attrs = this.parseJsxAttributes_();
  15936. var children = [];
  15937. switch (peekJsxToken().type) {
  15938. case SLASH:
  15939. nextJsxToken();
  15940. this.eat_(CLOSE_ANGLE);
  15941. break;
  15942. case CLOSE_ANGLE:
  15943. {
  15944. nextJsxTextToken();
  15945. loop: while (true) {
  15946. var token = nextJsxTextToken();
  15947. switch (token.type) {
  15948. case STRING:
  15949. {
  15950. children.push(new JsxText(token.location, token));
  15951. continue;
  15952. }
  15953. case OPEN_CURLY:
  15954. {
  15955. var start$__20 = token.location.start;
  15956. var expression = null;
  15957. if (!peek(CLOSE_CURLY)) {
  15958. expression = this.parseAssignmentExpression_(ALLOW_IN);
  15959. }
  15960. this.eatJsx_(CLOSE_CURLY);
  15961. var placeHolder = new JsxPlaceholder(this.getTreeLocation_(start$__20), expression);
  15962. children.push(placeHolder);
  15963. continue;
  15964. }
  15965. case OPEN_ANGLE:
  15966. {
  15967. var start$__21 = token.location.start;
  15968. if (peekJsxToken().type === SLASH) {
  15969. nextJsxToken();
  15970. break loop;
  15971. }
  15972. var subElement = this.parseJsxElementContinuation_(start$__21);
  15973. children.push(subElement);
  15974. resetScanner(subElement.location.end.offset);
  15975. continue;
  15976. }
  15977. default:
  15978. return this.parseSyntaxError_('Unexpected token');
  15979. }
  15980. }
  15981. var closeName = this.parseJsxElementName_();
  15982. if (!jsxNamesEqual(name, closeName)) {
  15983. this.reportError_(closeName.location, ("Non matching JSX closing tag. Expected " + jsxNameToString(name) + ", found " + jsxNameToString(closeName)));
  15984. }
  15985. this.eat_(CLOSE_ANGLE);
  15986. break;
  15987. }
  15988. default:
  15989. return this.parseSyntaxError_('Unexpected token');
  15990. }
  15991. var element = new JsxElement(this.getTreeLocation_(start), name, attrs, children);
  15992. return element;
  15993. },
  15994. parseJsxElementName_: function() {
  15995. var tokens = [];
  15996. var id = this.eatJsx_(JSX_IDENTIFIER);
  15997. var start = id.location.start;
  15998. tokens.push(id);
  15999. while (peekJsxToken().type === PERIOD) {
  16000. nextJsxToken();
  16001. var id$__22 = this.eatJsx_(JSX_IDENTIFIER);
  16002. tokens.push(id$__22);
  16003. }
  16004. return new JsxElementName(this.getTreeLocation_(start), tokens);
  16005. },
  16006. parseJsxAttributes_: function() {
  16007. var attributes = [];
  16008. loop: while (true) {
  16009. switch (peekJsxToken().type) {
  16010. case JSX_IDENTIFIER:
  16011. attributes.push(this.parseJsxAttribute_());
  16012. break;
  16013. case OPEN_CURLY:
  16014. attributes.push(this.parseJsxSpreadAttribute_());
  16015. break;
  16016. default:
  16017. break loop;
  16018. }
  16019. }
  16020. return attributes;
  16021. },
  16022. parseJsxAttribute_: function() {
  16023. var name = this.eatJsx_(JSX_IDENTIFIER);
  16024. var start = name.location.start;
  16025. var value = null;
  16026. if (peekJsxToken().type === EQUAL) {
  16027. this.eatJsx_(EQUAL);
  16028. value = this.parseJsxAttributeValue_();
  16029. }
  16030. return new JsxAttribute(this.getTreeLocation_(start), name, value);
  16031. },
  16032. parseJsxAttributeValue_: function() {
  16033. var token = peekJsxToken();
  16034. var start = token.location.start;
  16035. switch (token.type) {
  16036. case STRING:
  16037. nextJsxToken();
  16038. return new LiteralExpression(this.getTreeLocation_(start), token);
  16039. case OPEN_CURLY:
  16040. {
  16041. nextJsxToken();
  16042. var expr = this.parseAssignmentExpression_(ALLOW_IN);
  16043. this.eatJsx_(CLOSE_CURLY);
  16044. return new JsxPlaceholder(this.getTreeLocation_(start), expr);
  16045. }
  16046. case OPEN_ANGLE:
  16047. return this.parseJsxElement_();
  16048. }
  16049. return this.parseSyntaxError_('Unexpected token');
  16050. },
  16051. parseJsxSpreadAttribute_: function() {
  16052. var token = peekJsxToken();
  16053. var start = token.location.start;
  16054. nextJsxToken();
  16055. this.eatJsx_(DOT_DOT_DOT);
  16056. var expr = this.parseAssignmentExpression_(ALLOW_IN);
  16057. this.eatJsx_(CLOSE_CURLY);
  16058. return new JsxSpreadAttribute(this.getTreeLocation_(start), expr);
  16059. },
  16060. eatPossibleImplicitSemiColon_: function() {
  16061. var token = peekTokenNoLineTerminator();
  16062. if (!token)
  16063. return;
  16064. switch (token.type) {
  16065. case SEMI_COLON:
  16066. nextToken();
  16067. return;
  16068. case END_OF_FILE:
  16069. case CLOSE_CURLY:
  16070. return;
  16071. }
  16072. this.reportError_(token.location, 'Semi-colon expected');
  16073. },
  16074. peekImplicitSemiColon_: function() {
  16075. switch (peekType()) {
  16076. case SEMI_COLON:
  16077. case CLOSE_CURLY:
  16078. case END_OF_FILE:
  16079. return true;
  16080. }
  16081. var token = peekTokenNoLineTerminator();
  16082. return token === null;
  16083. },
  16084. eatOpt_: function(expectedTokenType) {
  16085. if (peek(expectedTokenType))
  16086. return nextToken();
  16087. return null;
  16088. },
  16089. eatIdOpt_: function() {
  16090. return peek(IDENTIFIER) ? this.eatId_() : null;
  16091. },
  16092. eatId_: function() {
  16093. var expected = arguments[0];
  16094. var token = nextToken();
  16095. if (token.type === IDENTIFIER) {
  16096. if (expected && token.value !== expected)
  16097. this.reportExpectedError_(token, expected);
  16098. return token;
  16099. }
  16100. if (token.isStrictKeyword()) {
  16101. if (this.strictMode_) {
  16102. this.reportReservedIdentifier_(token);
  16103. } else {
  16104. return new IdentifierToken(token.location, token.type);
  16105. }
  16106. } else {
  16107. this.reportExpectedError_(token, expected || 'identifier');
  16108. }
  16109. return token;
  16110. },
  16111. eatIdName_: function() {
  16112. var t = nextToken();
  16113. if (t.type !== IDENTIFIER) {
  16114. if (!t.isKeyword()) {
  16115. this.reportExpectedError_(t, 'identifier');
  16116. return null;
  16117. }
  16118. return new IdentifierToken(t.location, t.type);
  16119. }
  16120. return t;
  16121. },
  16122. eat_: function(expectedTokenType) {
  16123. return this.isExpectedToken_(nextToken(), expectedTokenType);
  16124. },
  16125. eatIf_: function(expectedTokenType) {
  16126. if (peek(expectedTokenType)) {
  16127. nextToken();
  16128. return true;
  16129. }
  16130. return false;
  16131. },
  16132. eatJsx_: function(expectedTokenType) {
  16133. return this.isExpectedToken_(nextJsxToken(), expectedTokenType);
  16134. },
  16135. isExpectedToken_: function(token, expectedTokenType) {
  16136. if (token.type !== expectedTokenType) {
  16137. this.reportExpectedError_(token, expectedTokenType);
  16138. }
  16139. return token;
  16140. },
  16141. reportExpectedError_: function(token, expected) {
  16142. this.reportError_(token.location, ("Unexpected token " + token));
  16143. },
  16144. getTreeStartLocation_: function() {
  16145. return peekLocation().start;
  16146. },
  16147. getTreeEndLocation_: function() {
  16148. return getLastToken().location.end;
  16149. },
  16150. getTreeLocation_: function(start) {
  16151. return new SourceRange(start, this.getTreeEndLocation_());
  16152. },
  16153. handleComment: function(range) {},
  16154. isAtEnd: function() {
  16155. return isAtEnd();
  16156. },
  16157. reportError_: function(location, message) {
  16158. this.errorReporter_.reportError(location, message);
  16159. },
  16160. reportReservedIdentifier_: function(token) {
  16161. this.reportError_(token.location, (token.type + " is a reserved identifier"));
  16162. },
  16163. validateAssignmentTarget_: function(tree, operation) {
  16164. if (!tree.isPattern() && !isValidSimpleAssignmentTarget(tree, this.strictMode_)) {
  16165. this.reportError_(tree.location, ("Invalid left-hand side expression in " + operation));
  16166. }
  16167. }
  16168. }, {});
  16169. }();
  16170. function jsxNamesEqual(name, other) {
  16171. if (name.names.length !== other.names.length) {
  16172. return false;
  16173. }
  16174. for (var i = 0; i < name.names.length; i++) {
  16175. if (name.names[i].value !== other.names[i].value) {
  16176. return false;
  16177. }
  16178. }
  16179. return true;
  16180. }
  16181. function jsxNameToString(name) {
  16182. return name.names.join('.');
  16183. }
  16184. return {get Parser() {
  16185. return Parser;
  16186. }};
  16187. });
  16188. $traceurRuntime.registerModule("traceur@0.0.112/src/util/SourcePosition.js", [], function() {
  16189. "use strict";
  16190. var __moduleName = "traceur@0.0.112/src/util/SourcePosition.js";
  16191. var SourcePosition = function() {
  16192. function SourcePosition(source, offset) {
  16193. this.source = source;
  16194. this.offset = offset;
  16195. this.line_ = -1;
  16196. this.column_ = -1;
  16197. }
  16198. return ($traceurRuntime.createClass)(SourcePosition, {
  16199. get line() {
  16200. if (this.line_ === -1)
  16201. this.line_ = this.source.lineNumberTable.getLine(this.offset);
  16202. return this.line_;
  16203. },
  16204. get column() {
  16205. if (this.column_ === -1)
  16206. this.column_ = this.source.lineNumberTable.getColumn(this.offset);
  16207. return this.column_;
  16208. },
  16209. toString: function() {
  16210. var name = this.source ? this.source.name : '';
  16211. return (name + ":" + (this.line + 1) + ":" + (this.column + 1));
  16212. }
  16213. }, {});
  16214. }();
  16215. return {get SourcePosition() {
  16216. return SourcePosition;
  16217. }};
  16218. });
  16219. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/LineNumberTable.js", [], function() {
  16220. "use strict";
  16221. var __moduleName = "traceur@0.0.112/src/syntax/LineNumberTable.js";
  16222. var SourcePosition = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourcePosition.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).SourcePosition;
  16223. var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).SourceRange;
  16224. var isLineTerminator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scanner.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).isLineTerminator;
  16225. var MAX_INT_REPRESENTATION = 9007199254740992;
  16226. function computeLineStartOffsets(source) {
  16227. var lineStartOffsets = [0];
  16228. var k = 1;
  16229. for (var index = 0; index < source.length; index++) {
  16230. var code = source.charCodeAt(index);
  16231. if (isLineTerminator(code)) {
  16232. if (code === 13 && source.charCodeAt(index + 1) === 10) {
  16233. index++;
  16234. }
  16235. lineStartOffsets[k++] = index + 1;
  16236. }
  16237. }
  16238. lineStartOffsets[k++] = MAX_INT_REPRESENTATION;
  16239. return lineStartOffsets;
  16240. }
  16241. var LineNumberTable = function() {
  16242. function LineNumberTable(sourceFile) {
  16243. this.sourceFile_ = sourceFile;
  16244. this.lineStartOffsets_ = null;
  16245. this.lastLine_ = 0;
  16246. this.lastOffset_ = -1;
  16247. }
  16248. return ($traceurRuntime.createClass)(LineNumberTable, {
  16249. ensureLineStartOffsets_: function() {
  16250. if (!this.lineStartOffsets_) {
  16251. this.lineStartOffsets_ = computeLineStartOffsets(this.sourceFile_.contents);
  16252. }
  16253. },
  16254. getSourcePosition: function(offset) {
  16255. return new SourcePosition(this.sourceFile_, offset);
  16256. },
  16257. getLine: function(offset) {
  16258. if (offset === this.lastOffset_)
  16259. return this.lastLine_;
  16260. this.ensureLineStartOffsets_();
  16261. if (offset < 0)
  16262. return 0;
  16263. var line;
  16264. if (offset < this.lastOffset_) {
  16265. for (var i = this.lastLine_; i >= 0; i--) {
  16266. if (this.lineStartOffsets_[i] <= offset) {
  16267. line = i;
  16268. break;
  16269. }
  16270. }
  16271. } else {
  16272. for (var i$__1 = this.lastLine_; true; i$__1++) {
  16273. if (this.lineStartOffsets_[i$__1] > offset) {
  16274. line = i$__1 - 1;
  16275. break;
  16276. }
  16277. }
  16278. }
  16279. this.lastLine_ = line;
  16280. this.lastOffset_ = offset;
  16281. return line;
  16282. },
  16283. offsetOfLine: function(line) {
  16284. this.ensureLineStartOffsets_();
  16285. return this.lineStartOffsets_[line];
  16286. },
  16287. getColumn: function(offset) {
  16288. var line = this.getLine(offset);
  16289. return offset - this.lineStartOffsets_[line];
  16290. },
  16291. getSourceRange: function(startOffset, endOffset) {
  16292. return new SourceRange(this.getSourcePosition(startOffset), this.getSourcePosition(endOffset));
  16293. }
  16294. }, {});
  16295. }();
  16296. return {get LineNumberTable() {
  16297. return LineNumberTable;
  16298. }};
  16299. });
  16300. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/SourceFile.js", [], function() {
  16301. "use strict";
  16302. var __moduleName = "traceur@0.0.112/src/syntax/SourceFile.js";
  16303. var LineNumberTable = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LineNumberTable.js", "traceur@0.0.112/src/syntax/SourceFile.js")).LineNumberTable;
  16304. var SourceFile = function() {
  16305. function SourceFile(name, contents) {
  16306. this.name = name;
  16307. this.contents = contents;
  16308. this.lineNumberTable = new LineNumberTable(this);
  16309. }
  16310. return ($traceurRuntime.createClass)(SourceFile, {}, {});
  16311. }();
  16312. return {get SourceFile() {
  16313. return SourceFile;
  16314. }};
  16315. });
  16316. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PlaceholderParser.js", [], function() {
  16317. "use strict";
  16318. var __moduleName = "traceur@0.0.112/src/codegeneration/PlaceholderParser.js";
  16319. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")),
  16320. ARGUMENT_LIST = $__2.ARGUMENT_LIST,
  16321. BLOCK = $__2.BLOCK,
  16322. EXPRESSION_STATEMENT = $__2.EXPRESSION_STATEMENT,
  16323. FUNCTION_BODY = $__2.FUNCTION_BODY,
  16324. IDENTIFIER_EXPRESSION = $__2.IDENTIFIER_EXPRESSION;
  16325. var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).IdentifierToken;
  16326. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).LiteralToken;
  16327. var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/CollectingErrorReporter.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).CollectingErrorReporter;
  16328. var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).Options;
  16329. var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTree.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).ParseTree;
  16330. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).ParseTreeTransformer;
  16331. var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Parser.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).Parser;
  16332. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")),
  16333. LiteralExpression = $__10.LiteralExpression,
  16334. LiteralPropertyName = $__10.LiteralPropertyName,
  16335. TypeName = $__10.TypeName;
  16336. var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/SourceFile.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).SourceFile;
  16337. var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).IDENTIFIER;
  16338. var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")),
  16339. createArrayLiteral = $__13.createArrayLiteral,
  16340. createBindingIdentifier = $__13.createBindingIdentifier,
  16341. createBlock = $__13.createBlock,
  16342. createBooleanLiteral = $__13.createBooleanLiteral,
  16343. createCommaExpression = $__13.createCommaExpression,
  16344. createExpressionStatement = $__13.createExpressionStatement,
  16345. createFunctionBody = $__13.createFunctionBody,
  16346. createIdentifierExpression = $__13.createIdentifierExpression,
  16347. createIdentifierToken = $__13.createIdentifierToken,
  16348. createMemberExpression = $__13.createMemberExpression,
  16349. createNullLiteral = $__13.createNullLiteral,
  16350. createNumberLiteral = $__13.createNumberLiteral,
  16351. createParenExpression = $__13.createParenExpression,
  16352. createStringLiteral = $__13.createStringLiteral,
  16353. createVoid0 = $__13.createVoid0;
  16354. var NOT_FOUND = {};
  16355. function makeParseFunction(doParse) {
  16356. var cache = new Map();
  16357. return function(sourceLiterals) {
  16358. for (var values = [],
  16359. $__1 = 1; $__1 < arguments.length; $__1++)
  16360. values[$__1 - 1] = arguments[$__1];
  16361. return parse(sourceLiterals, values, doParse, cache);
  16362. };
  16363. }
  16364. var parseExpression = makeParseFunction(function(p) {
  16365. return p.parseExpression();
  16366. });
  16367. var parseStatement = makeParseFunction(function(p) {
  16368. return p.parseStatement();
  16369. });
  16370. var parseModule = makeParseFunction(function(p) {
  16371. return p.parseModule();
  16372. });
  16373. var parseScript = makeParseFunction(function(p) {
  16374. return p.parseScript();
  16375. });
  16376. var parseStatements = makeParseFunction(function(p) {
  16377. return p.parseStatements();
  16378. });
  16379. var parsePropertyDefinition = makeParseFunction(function(p) {
  16380. return p.parsePropertyDefinition();
  16381. });
  16382. function parse(sourceLiterals, values, doParse, cache) {
  16383. var tree = cache.get(sourceLiterals);
  16384. if (!tree) {
  16385. var source = insertPlaceholderIdentifiers(sourceLiterals);
  16386. var errorReporter = new CollectingErrorReporter();
  16387. var parser = getParser(source, errorReporter);
  16388. tree = doParse(parser);
  16389. if (errorReporter.hadError() || !tree || !parser.isAtEnd()) {
  16390. throw new Error(("Internal error trying to parse:\n\n" + source + "\n\n" + errorReporter.errorsAsString()));
  16391. }
  16392. cache.set(sourceLiterals, tree);
  16393. }
  16394. if (!values.length)
  16395. return tree;
  16396. if (tree instanceof ParseTree)
  16397. return new PlaceholderTransformer(values).transformAny(tree);
  16398. return new PlaceholderTransformer(values).transformList(tree);
  16399. }
  16400. var PREFIX = '$__placeholder__';
  16401. function insertPlaceholderIdentifiers(sourceLiterals) {
  16402. var source = sourceLiterals[0];
  16403. for (var i = 1; i < sourceLiterals.length; i++) {
  16404. source += PREFIX + String(i - 1) + sourceLiterals[i];
  16405. }
  16406. return source;
  16407. }
  16408. var counter = 0;
  16409. function getParser(source, errorReporter) {
  16410. var file = new SourceFile(null, source);
  16411. var options = new Options();
  16412. options.experimental = true;
  16413. return new Parser(file, errorReporter, options);
  16414. }
  16415. function convertValueToExpression(value) {
  16416. if (value instanceof ParseTree)
  16417. return value;
  16418. if (value instanceof IdentifierToken)
  16419. return createIdentifierExpression(value);
  16420. if (value instanceof LiteralToken)
  16421. return new LiteralExpression(value.location, value);
  16422. if (Array.isArray(value)) {
  16423. if (value[0] instanceof ParseTree) {
  16424. if (value.length === 1)
  16425. return value[0];
  16426. if (value[0].isStatement())
  16427. return createBlock(value);
  16428. else
  16429. return createParenExpression(createCommaExpression(value));
  16430. }
  16431. return createArrayLiteral(value.map(convertValueToExpression));
  16432. }
  16433. if (value === null)
  16434. return createNullLiteral();
  16435. if (value === undefined)
  16436. return createVoid0();
  16437. switch (typeof value) {
  16438. case 'string':
  16439. return createStringLiteral(value);
  16440. case 'boolean':
  16441. return createBooleanLiteral(value);
  16442. case 'number':
  16443. return createNumberLiteral(value);
  16444. }
  16445. throw new Error('Not implemented');
  16446. }
  16447. function convertValueToIdentifierToken(value) {
  16448. if (value instanceof IdentifierToken)
  16449. return value;
  16450. return createIdentifierToken(value);
  16451. }
  16452. function convertValueToType(value) {
  16453. if (value === null)
  16454. return null;
  16455. if (value instanceof ParseTree)
  16456. return value;
  16457. if (typeof value === 'string') {
  16458. return new TypeName(null, null, convertValueToIdentifierToken(value));
  16459. }
  16460. if (value instanceof IdentifierToken) {
  16461. return new TypeName(null, null, value);
  16462. }
  16463. throw new Error('Not implemented');
  16464. }
  16465. var PlaceholderTransformer = function($__super) {
  16466. function PlaceholderTransformer(values) {
  16467. $traceurRuntime.superConstructor(PlaceholderTransformer).call(this);
  16468. this.values = values;
  16469. }
  16470. return ($traceurRuntime.createClass)(PlaceholderTransformer, {
  16471. getValueAt: function(index) {
  16472. return this.values[index];
  16473. },
  16474. getValue_: function(str) {
  16475. if (str.indexOf(PREFIX) !== 0)
  16476. return NOT_FOUND;
  16477. return this.getValueAt(Number(str.slice(PREFIX.length)));
  16478. },
  16479. transformIdentifierExpression: function(tree) {
  16480. var value = this.getValue_(tree.identifierToken.value);
  16481. if (value === NOT_FOUND)
  16482. return tree;
  16483. return convertValueToExpression(value);
  16484. },
  16485. transformBindingIdentifier: function(tree) {
  16486. var value = this.getValue_(tree.identifierToken.value);
  16487. if (value === NOT_FOUND)
  16488. return tree;
  16489. return createBindingIdentifier(value);
  16490. },
  16491. transformExpressionStatement: function(tree) {
  16492. if (tree.expression.type === IDENTIFIER_EXPRESSION) {
  16493. var transformedExpression = this.transformIdentifierExpression(tree.expression);
  16494. if (transformedExpression === tree.expression)
  16495. return tree;
  16496. if (transformedExpression.isStatementListItem() || transformedExpression.type === FUNCTION_BODY) {
  16497. return transformedExpression;
  16498. }
  16499. return createExpressionStatement(transformedExpression);
  16500. }
  16501. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformExpressionStatement").call(this, tree);
  16502. },
  16503. transformBlock: function(tree) {
  16504. if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) {
  16505. var transformedStatement = this.transformExpressionStatement(tree.statements[0]);
  16506. if (transformedStatement === tree.statements[0])
  16507. return tree;
  16508. if (transformedStatement.type === BLOCK)
  16509. return transformedStatement;
  16510. }
  16511. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformBlock").call(this, tree);
  16512. },
  16513. transformFunctionBody: function(tree) {
  16514. if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) {
  16515. var transformedStatement = this.transformExpressionStatement(tree.statements[0]);
  16516. if (transformedStatement.type === FUNCTION_BODY)
  16517. return transformedStatement;
  16518. if (transformedStatement === tree.statements[0])
  16519. return tree;
  16520. if (transformedStatement.type === BLOCK)
  16521. return createFunctionBody(transformedStatement.statements);
  16522. }
  16523. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformFunctionBody").call(this, tree);
  16524. },
  16525. transformMemberExpression: function(tree) {
  16526. var value = this.getValue_(tree.memberName.value);
  16527. if (value === NOT_FOUND)
  16528. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformMemberExpression").call(this, tree);
  16529. var operand = this.transformAny(tree.operand);
  16530. return createMemberExpression(operand, value);
  16531. },
  16532. transformLiteralPropertyName: function(tree) {
  16533. if (tree.literalToken.type === IDENTIFIER) {
  16534. var value = this.getValue_(tree.literalToken.value);
  16535. if (value !== NOT_FOUND) {
  16536. return new LiteralPropertyName(null, convertValueToIdentifierToken(value));
  16537. }
  16538. }
  16539. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformLiteralPropertyName").call(this, tree);
  16540. },
  16541. transformArgumentList: function(tree) {
  16542. if (tree.args.length === 1 && tree.args[0].type === IDENTIFIER_EXPRESSION) {
  16543. var arg0 = this.transformAny(tree.args[0]);
  16544. if (arg0 === tree.args[0])
  16545. return tree;
  16546. if (arg0.type === ARGUMENT_LIST)
  16547. return arg0;
  16548. }
  16549. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformArgumentList").call(this, tree);
  16550. },
  16551. transformTypeName: function(tree) {
  16552. var value = this.getValue_(tree.name.value);
  16553. if (value === NOT_FOUND)
  16554. return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformTypeName").call(this, tree);
  16555. var moduleName = this.transformAny(tree.moduleName);
  16556. if (moduleName !== null) {
  16557. return new TypeName(null, moduleName, convertValueToIdentifierToken(value));
  16558. }
  16559. return convertValueToType(value);
  16560. }
  16561. }, {}, $__super);
  16562. }(ParseTreeTransformer);
  16563. return {
  16564. get parseExpression() {
  16565. return parseExpression;
  16566. },
  16567. get parseStatement() {
  16568. return parseStatement;
  16569. },
  16570. get parseModule() {
  16571. return parseModule;
  16572. },
  16573. get parseScript() {
  16574. return parseScript;
  16575. },
  16576. get parseStatements() {
  16577. return parseStatements;
  16578. },
  16579. get parsePropertyDefinition() {
  16580. return parsePropertyDefinition;
  16581. },
  16582. get PlaceholderTransformer() {
  16583. return PlaceholderTransformer;
  16584. }
  16585. };
  16586. });
  16587. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PrependStatements.js", [], function() {
  16588. "use strict";
  16589. var __moduleName = "traceur@0.0.112/src/codegeneration/PrependStatements.js";
  16590. function prependStatements(statements) {
  16591. var $__1;
  16592. for (var statementsToPrepend = [],
  16593. $__0 = 1; $__0 < arguments.length; $__0++)
  16594. statementsToPrepend[$__0 - 1] = arguments[$__0];
  16595. if (!statements.length)
  16596. return statementsToPrepend;
  16597. if (!statementsToPrepend.length)
  16598. return statements;
  16599. var transformed = [];
  16600. var inProlog = true;
  16601. statements.forEach(function(statement) {
  16602. var $__1;
  16603. if (inProlog && !statement.isDirectivePrologue()) {
  16604. ($__1 = transformed).push.apply($__1, $traceurRuntime.spread(statementsToPrepend));
  16605. inProlog = false;
  16606. }
  16607. transformed.push(statement);
  16608. });
  16609. if (inProlog) {
  16610. ($__1 = transformed).push.apply($__1, $traceurRuntime.spread(statementsToPrepend));
  16611. }
  16612. return transformed;
  16613. }
  16614. return {get prependStatements() {
  16615. return prependStatements;
  16616. }};
  16617. });
  16618. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js", [], function() {
  16619. "use strict";
  16620. var __moduleName = "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js";
  16621. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")),
  16622. CONST = $__5.CONST,
  16623. VAR = $__5.VAR;
  16624. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")),
  16625. ImportDeclaration = $__6.ImportDeclaration,
  16626. ImportedBinding = $__6.ImportedBinding,
  16627. ImportSpecifier = $__6.ImportSpecifier,
  16628. ImportSpecifierSet = $__6.ImportSpecifierSet,
  16629. Module = $__6.Module,
  16630. ModuleSpecifier = $__6.ModuleSpecifier,
  16631. Script = $__6.Script;
  16632. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).StringSet;
  16633. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")),
  16634. createBindingIdentifier = $__8.createBindingIdentifier,
  16635. createIdentifierToken = $__8.createIdentifierToken,
  16636. createIdentifierExpression = $__8.createIdentifierExpression,
  16637. createMemberExpression = $__8.createMemberExpression,
  16638. createStringLiteral = $__8.createStringLiteral,
  16639. createStringLiteralToken = $__8.createStringLiteralToken,
  16640. createVariableStatement = $__8.createVariableStatement;
  16641. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).parseExpression;
  16642. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).prependStatements;
  16643. function toTempName(name) {
  16644. return ("$__" + name);
  16645. }
  16646. function getDeclarationType(options) {
  16647. return options.parseOptions.blockBinding && !options.transformOptions.blockBinding ? CONST : VAR;
  16648. }
  16649. function ImportRuntimeTrait(ParseTreeTransformerClass) {
  16650. return function($__super) {
  16651. function $__0() {
  16652. var $__4;
  16653. for (var args = [],
  16654. $__3 = 0; $__3 < arguments.length; $__3++)
  16655. args[$__3] = arguments[$__3];
  16656. ($__4 = $traceurRuntime.superConstructor($__0)).call.apply($__4, $traceurRuntime.spread([this], args));
  16657. this.importedNames = new StringSet();
  16658. this._existingImports = new StringSet();
  16659. }
  16660. return ($traceurRuntime.createClass)($__0, {
  16661. getRuntimeExpression: function(name) {
  16662. if (this.options.importRuntime) {
  16663. this.addImportedName(name);
  16664. return createIdentifierExpression(toTempName(name));
  16665. }
  16666. return createMemberExpression('$traceurRuntime', name);
  16667. },
  16668. get requiredNames() {
  16669. return this.importedNames;
  16670. },
  16671. addImportedName: function(name) {
  16672. this.importedNames.add(name);
  16673. },
  16674. transformScript: function(tree) {
  16675. var transformed = $traceurRuntime.superGet(this, $__0.prototype, "transformScript").call(this, tree);
  16676. if (tree === transformed) {
  16677. return tree;
  16678. }
  16679. if (!this.options.importRuntime) {
  16680. return transformed;
  16681. }
  16682. var scriptItemList = this.addRuntimeImports(transformed.scriptItemList);
  16683. return new Script(tree.location, scriptItemList, tree.moduleName);
  16684. },
  16685. transformModule: function(tree) {
  16686. var transformed = $traceurRuntime.superGet(this, $__0.prototype, "transformModule").call(this, tree);
  16687. if (tree === transformed) {
  16688. return tree;
  16689. }
  16690. if (!this.options.importRuntime) {
  16691. return transformed;
  16692. }
  16693. var scriptItemList = this.addRuntimeImports(transformed.scriptItemList);
  16694. return new Module(tree.location, scriptItemList, tree.moduleName);
  16695. },
  16696. transformImportedBinding: function(tree) {
  16697. this._existingImports.add(tree.binding.getStringValue());
  16698. return $traceurRuntime.superGet(this, $__0.prototype, "transformImportedBinding").call(this, tree);
  16699. },
  16700. _getModuleSpecifier: function(name) {
  16701. var base = 'traceur/dist/commonjs';
  16702. if (this.options.modules === 'parse') {
  16703. base = 'traceur/src';
  16704. }
  16705. var moduleId = createStringLiteralToken((base + "/runtime/modules/" + name + ".js"));
  16706. return new ModuleSpecifier(null, moduleId);
  16707. },
  16708. getRuntimeImports: function() {
  16709. var $__2 = this;
  16710. return this.importedNames.valuesAsArray().filter(function(name) {
  16711. return !$__2._existingImports.has(toTempName(name));
  16712. }).map(function(name) {
  16713. var def = createIdentifierToken('default');
  16714. var binding = new ImportedBinding(null, createBindingIdentifier(toTempName(name)));
  16715. var specifier = new ImportSpecifier(null, binding, def);
  16716. return new ImportDeclaration(null, new ImportSpecifierSet(null, [specifier]), $__2._getModuleSpecifier(name));
  16717. });
  16718. },
  16719. addRuntimeImports: function(scriptItemList) {
  16720. var runtimeImports = this.getRuntimeImports();
  16721. return prependStatements.apply((void 0), $traceurRuntime.spread([scriptItemList], runtimeImports));
  16722. }
  16723. }, {}, $__super);
  16724. }(ParseTreeTransformerClass);
  16725. }
  16726. return {get default() {
  16727. return ImportRuntimeTrait;
  16728. }};
  16729. });
  16730. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TempVarTransformer.js", [], function() {
  16731. "use strict";
  16732. var __moduleName = "traceur@0.0.112/src/codegeneration/TempVarTransformer.js";
  16733. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).ParseTreeTransformer;
  16734. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")),
  16735. Module = $__6.Module,
  16736. Script = $__6.Script;
  16737. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).ARGUMENTS;
  16738. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).StringSet;
  16739. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")),
  16740. LET = $__9.LET,
  16741. VAR = $__9.VAR;
  16742. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")),
  16743. createFunctionBody = $__10.createFunctionBody,
  16744. createThisExpression = $__10.createThisExpression,
  16745. createIdentifierExpression = $__10.createIdentifierExpression,
  16746. createVariableDeclaration = $__10.createVariableDeclaration,
  16747. createVariableDeclarationList = $__10.createVariableDeclarationList,
  16748. createVariableStatement = $__10.createVariableStatement;
  16749. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).prependStatements;
  16750. var TempVarStatement = function() {
  16751. function TempVarStatement(name, initializer) {
  16752. this.name = name;
  16753. this.initializer = initializer;
  16754. }
  16755. return ($traceurRuntime.createClass)(TempVarStatement, {}, {});
  16756. }();
  16757. var TempScope = function() {
  16758. function TempScope() {
  16759. this.identifiers = [];
  16760. }
  16761. return ($traceurRuntime.createClass)(TempScope, {
  16762. push: function(identifier) {
  16763. this.identifiers.push(identifier);
  16764. },
  16765. pop: function() {
  16766. return this.identifiers.pop();
  16767. },
  16768. release: function(obj) {
  16769. for (var i = this.identifiers.length - 1; i >= 0; i--) {
  16770. obj.releaseTempName(this.identifiers[i]);
  16771. }
  16772. }
  16773. }, {});
  16774. }();
  16775. var VarScope = function() {
  16776. function VarScope(options) {
  16777. this.thisName = null;
  16778. this.argumentName = null;
  16779. this.tempVarStatements = [];
  16780. this.declarationType_ = options.blockBinding && !options.transformOptions.blockBinding ? LET : VAR;
  16781. }
  16782. return ($traceurRuntime.createClass)(VarScope, {
  16783. push: function(tempVarStatement) {
  16784. this.tempVarStatements.push(tempVarStatement);
  16785. },
  16786. pop: function() {
  16787. return this.tempVarStatements.pop();
  16788. },
  16789. release: function(obj) {
  16790. for (var i = this.tempVarStatements.length - 1; i >= 0; i--) {
  16791. obj.releaseTempName(this.tempVarStatements[i].name);
  16792. }
  16793. },
  16794. isEmpty: function() {
  16795. return !this.tempVarStatements.length;
  16796. },
  16797. createVariableStatement: function() {
  16798. var declarations = [];
  16799. var seenNames = new StringSet();
  16800. for (var i = 0; i < this.tempVarStatements.length; i++) {
  16801. var $__4 = this.tempVarStatements[i],
  16802. name = $__4.name,
  16803. initializer = $__4.initializer;
  16804. if (seenNames.has(name)) {
  16805. if (initializer)
  16806. throw new Error('Invalid use of TempVarTransformer');
  16807. continue;
  16808. }
  16809. seenNames.add(name);
  16810. declarations.push(createVariableDeclaration(name, initializer));
  16811. }
  16812. return createVariableStatement(createVariableDeclarationList(this.declarationType_, declarations));
  16813. }
  16814. }, {});
  16815. }();
  16816. var TempVarTransformer = function($__super) {
  16817. function TempVarTransformer(identifierGenerator, reporter, options) {
  16818. $traceurRuntime.superConstructor(TempVarTransformer).call(this);
  16819. this.identifierGenerator = identifierGenerator;
  16820. this.reporter = reporter;
  16821. this.options = options;
  16822. this.tempVarStack_ = [new VarScope(this.options)];
  16823. this.tempScopeStack_ = [new TempScope()];
  16824. this.namePool_ = [];
  16825. }
  16826. return ($traceurRuntime.createClass)(TempVarTransformer, {
  16827. transformStatements_: function(statements) {
  16828. this.tempVarStack_.push(new VarScope(this.options));
  16829. var transformedStatements = this.transformList(statements);
  16830. var vars = this.tempVarStack_.pop();
  16831. if (vars.isEmpty())
  16832. return transformedStatements;
  16833. var variableStatement = vars.createVariableStatement();
  16834. vars.release(this);
  16835. return prependStatements(transformedStatements, variableStatement);
  16836. },
  16837. transformScript: function(tree) {
  16838. var scriptItemList = this.transformStatements_(tree.scriptItemList);
  16839. if (scriptItemList === tree.scriptItemList) {
  16840. return tree;
  16841. }
  16842. return new Script(tree.location, scriptItemList, tree.moduleName);
  16843. },
  16844. transformModule: function(tree) {
  16845. var scriptItemList = this.transformStatements_(tree.scriptItemList);
  16846. if (scriptItemList === tree.scriptItemList) {
  16847. return tree;
  16848. }
  16849. return new Module(tree.location, scriptItemList, tree.moduleName);
  16850. },
  16851. transformFunctionBody: function(tree) {
  16852. this.pushTempScope();
  16853. var statements = this.transformStatements_(tree.statements);
  16854. this.popTempScope();
  16855. if (statements === tree.statements)
  16856. return tree;
  16857. return createFunctionBody(statements);
  16858. },
  16859. getTempIdentifier: function() {
  16860. var name = this.getName_();
  16861. this.tempScopeStack_[this.tempScopeStack_.length - 1].push(name);
  16862. return name;
  16863. },
  16864. getName_: function() {
  16865. return this.namePool_.length ? this.namePool_.pop() : this.identifierGenerator.generateUniqueIdentifier();
  16866. },
  16867. addTempVar: function() {
  16868. var initializer = arguments[0] !== (void 0) ? arguments[0] : null;
  16869. var vars = this.tempVarStack_[this.tempVarStack_.length - 1];
  16870. var name = this.getName_();
  16871. vars.push(new TempVarStatement(name, initializer));
  16872. return name;
  16873. },
  16874. registerTempVarName: function(name) {
  16875. var vars = this.tempVarStack_[this.tempVarStack_.length - 1];
  16876. vars.push(new TempVarStatement(name, null));
  16877. },
  16878. addTempVarForThis: function() {
  16879. var varScope = this.tempVarStack_[this.tempVarStack_.length - 1];
  16880. return varScope.thisName || (varScope.thisName = this.addTempVar(createThisExpression()));
  16881. },
  16882. addTempVarForArguments: function() {
  16883. var varScope = this.tempVarStack_[this.tempVarStack_.length - 1];
  16884. return varScope.argumentName || (varScope.argumentName = this.addTempVar(createIdentifierExpression(ARGUMENTS)));
  16885. },
  16886. pushTempScope: function() {
  16887. this.tempScopeStack_.push(new TempScope());
  16888. },
  16889. popTempScope: function() {
  16890. this.tempScopeStack_.pop().release(this);
  16891. },
  16892. releaseTempName: function(name) {
  16893. this.namePool_.push(name);
  16894. }
  16895. }, {}, $__super);
  16896. }(ParseTreeTransformer);
  16897. return {get TempVarTransformer() {
  16898. return TempVarTransformer;
  16899. }};
  16900. });
  16901. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js", [], function() {
  16902. "use strict";
  16903. var __moduleName = "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js";
  16904. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js")).ParseTreeVisitor;
  16905. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js")).StringSet;
  16906. var BindingsInDestructuringPatternVisitor = function($__super) {
  16907. function BindingsInDestructuringPatternVisitor() {
  16908. $traceurRuntime.superConstructor(BindingsInDestructuringPatternVisitor).call(this);
  16909. this.bindings = new StringSet();
  16910. }
  16911. return ($traceurRuntime.createClass)(BindingsInDestructuringPatternVisitor, {
  16912. visitBindingIdentifier: function(tree) {
  16913. this.bindings.add(tree.getStringValue());
  16914. },
  16915. visitBindingElement: function(tree) {
  16916. this.visitAny(tree.binding);
  16917. },
  16918. visitVariableDeclaration: function(tree) {
  16919. this.visitAny(tree.lvalue);
  16920. }
  16921. }, {}, $__super);
  16922. }(ParseTreeVisitor);
  16923. function bindingsInDestructuringPattern(tree) {
  16924. var v = new BindingsInDestructuringPatternVisitor();
  16925. v.visitAny(tree);
  16926. return v.bindings;
  16927. }
  16928. return {get default() {
  16929. return bindingsInDestructuringPattern;
  16930. }};
  16931. });
  16932. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/DestructuringTransformer.js", [], function() {
  16933. "use strict";
  16934. var __moduleName = "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js";
  16935. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")),
  16936. ARRAY_LITERAL = $__8.ARRAY_LITERAL,
  16937. ARRAY_PATTERN = $__8.ARRAY_PATTERN,
  16938. ASSIGNMENT_ELEMENT = $__8.ASSIGNMENT_ELEMENT,
  16939. BINDING_ELEMENT = $__8.BINDING_ELEMENT,
  16940. BINDING_IDENTIFIER = $__8.BINDING_IDENTIFIER,
  16941. BLOCK = $__8.BLOCK,
  16942. CALL_EXPRESSION = $__8.CALL_EXPRESSION,
  16943. COMPUTED_PROPERTY_NAME = $__8.COMPUTED_PROPERTY_NAME,
  16944. IDENTIFIER_EXPRESSION = $__8.IDENTIFIER_EXPRESSION,
  16945. LITERAL_EXPRESSION = $__8.LITERAL_EXPRESSION,
  16946. MEMBER_EXPRESSION = $__8.MEMBER_EXPRESSION,
  16947. MEMBER_LOOKUP_EXPRESSION = $__8.MEMBER_LOOKUP_EXPRESSION,
  16948. OBJECT_LITERAL = $__8.OBJECT_LITERAL,
  16949. OBJECT_PATTERN_FIELD = $__8.OBJECT_PATTERN_FIELD,
  16950. OBJECT_PATTERN = $__8.OBJECT_PATTERN,
  16951. PAREN_EXPRESSION = $__8.PAREN_EXPRESSION,
  16952. VARIABLE_DECLARATION_LIST = $__8.VARIABLE_DECLARATION_LIST,
  16953. VARIABLE_STATEMENT = $__8.VARIABLE_STATEMENT;
  16954. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")),
  16955. AnonBlock = $__9.AnonBlock,
  16956. AssignmentElement = $__9.AssignmentElement,
  16957. BindingElement = $__9.BindingElement,
  16958. Catch = $__9.Catch,
  16959. ExportDeclaration = $__9.ExportDeclaration,
  16960. ForInStatement = $__9.ForInStatement,
  16961. ForOfStatement = $__9.ForOfStatement,
  16962. ForOnStatement = $__9.ForOnStatement,
  16963. VariableDeclarationList = $__9.VariableDeclarationList,
  16964. VariableStatement = $__9.VariableStatement;
  16965. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).default;
  16966. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).TempVarTransformer;
  16967. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")),
  16968. EQUAL = $__12.EQUAL,
  16969. LET = $__12.LET,
  16970. VAR = $__12.VAR;
  16971. var bindingsInDestructuringPattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/bindingsInDestructuringPattern.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).default;
  16972. var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")),
  16973. createAssignmentExpression = $__14.createAssignmentExpression,
  16974. createBindingIdentifier = $__14.createBindingIdentifier,
  16975. createBlock = $__14.createBlock,
  16976. createCommaExpression = $__14.createCommaExpression,
  16977. createExpressionStatement = $__14.createExpressionStatement,
  16978. createFunctionBody = $__14.createFunctionBody,
  16979. createIdentifierExpression = $__14.createIdentifierExpression,
  16980. createMemberExpression = $__14.createMemberExpression,
  16981. createMemberLookupExpression = $__14.createMemberLookupExpression,
  16982. createParenExpression = $__14.createParenExpression,
  16983. createVariableDeclaration = $__14.createVariableDeclaration,
  16984. createVariableDeclarationList = $__14.createVariableDeclarationList,
  16985. createVariableStatement = $__14.createVariableStatement;
  16986. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).parseExpression;
  16987. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).prependStatements;
  16988. var Desugaring = function() {
  16989. function Desugaring(rvalue) {
  16990. this.rvalue = rvalue;
  16991. this.expressions = [];
  16992. this.pendingExpressions = [];
  16993. }
  16994. return ($traceurRuntime.createClass)(Desugaring, {
  16995. createIterator: function(iterId) {
  16996. this.pendingExpressions.push(parseExpression($traceurRuntime.getTemplateObject(["", " = ", "[Symbol.iterator]()"]), iterId, this.rvalue));
  16997. },
  16998. createInitializer: function(expression) {
  16999. if (this.pendingExpressions.length === 0)
  17000. return expression;
  17001. var expressions = this.pendingExpressions;
  17002. this.pendingExpressions = [];
  17003. expressions.push(expression);
  17004. return createParenExpression(createCommaExpression(expressions));
  17005. },
  17006. skipHole: function(iterId) {
  17007. this.pendingExpressions.push(parseExpression($traceurRuntime.getTemplateObject(["", ".next()"]), iterId));
  17008. }
  17009. }, {});
  17010. }();
  17011. var AssignmentExpressionDesugaring = function($__super) {
  17012. function AssignmentExpressionDesugaring(rvalue) {
  17013. $traceurRuntime.superConstructor(AssignmentExpressionDesugaring).call(this, rvalue);
  17014. }
  17015. return ($traceurRuntime.createClass)(AssignmentExpressionDesugaring, {
  17016. assign: function(lvalue, rvalue) {
  17017. lvalue = lvalue instanceof AssignmentElement ? lvalue.assignment : lvalue;
  17018. rvalue = this.createInitializer(rvalue);
  17019. this.expressions.push(createAssignmentExpression(lvalue, rvalue));
  17020. },
  17021. createAssignmentExpression: function(tempId, rvalue) {
  17022. var $__6;
  17023. var expressions = this.expressions;
  17024. expressions.unshift(createAssignmentExpression(tempId, rvalue));
  17025. ($__6 = expressions).push.apply($__6, $traceurRuntime.spread(this.pendingExpressions, [tempId]));
  17026. return createParenExpression(createCommaExpression(expressions));
  17027. }
  17028. }, {}, $__super);
  17029. }(Desugaring);
  17030. var VariableDeclarationDesugaring = function($__super) {
  17031. function VariableDeclarationDesugaring(rvalue) {
  17032. $traceurRuntime.superConstructor(VariableDeclarationDesugaring).call(this, rvalue);
  17033. }
  17034. return ($traceurRuntime.createClass)(VariableDeclarationDesugaring, {
  17035. assign: function(lvalue, rvalue) {
  17036. var binding = lvalue instanceof BindingElement ? lvalue.binding : createBindingIdentifier(lvalue);
  17037. rvalue = this.createInitializer(rvalue);
  17038. this.expressions.push(createVariableDeclaration(binding, rvalue));
  17039. },
  17040. get declarations() {
  17041. return this.expressions;
  17042. }
  17043. }, {}, $__super);
  17044. }(Desugaring);
  17045. var DestructuringTransformer = function($__super) {
  17046. function DestructuringTransformer(identifierGenerator, reporter, options) {
  17047. $traceurRuntime.superConstructor(DestructuringTransformer).call(this, identifierGenerator, reporter, options);
  17048. this.parameterDeclarations = null;
  17049. }
  17050. return ($traceurRuntime.createClass)(DestructuringTransformer, {
  17051. transformArrayPattern: function(tree) {
  17052. throw new Error('unreachable');
  17053. },
  17054. transformObjectPattern: function(tree) {
  17055. throw new Error('unreachable');
  17056. },
  17057. transformBinaryExpression: function(tree) {
  17058. this.pushTempScope();
  17059. var rv;
  17060. if (tree.operator.type === EQUAL && tree.left.isPattern()) {
  17061. rv = this.transformAny(this.desugarAssignment_(tree.left, tree.right));
  17062. } else {
  17063. rv = $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformBinaryExpression").call(this, tree);
  17064. }
  17065. this.popTempScope();
  17066. return rv;
  17067. },
  17068. desugarAssignment_: function(lvalue, rvalue) {
  17069. var tempId = createIdentifierExpression(this.addTempVar());
  17070. var desugaring = new AssignmentExpressionDesugaring(tempId);
  17071. this.desugarPattern_(desugaring, lvalue);
  17072. return desugaring.createAssignmentExpression(tempId, rvalue);
  17073. },
  17074. transformVariableDeclarationList: function(tree) {
  17075. var $__4 = this;
  17076. if (!hasDestructuring(tree)) {
  17077. return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformVariableDeclarationList").call(this, tree);
  17078. }
  17079. var desugaredDeclarations = [];
  17080. tree.declarations.forEach(function(declaration) {
  17081. var $__6;
  17082. if (declaration.lvalue.isPattern()) {
  17083. ($__6 = desugaredDeclarations).push.apply($__6, $traceurRuntime.spread($__4.desugarVariableDeclaration_(declaration)));
  17084. } else {
  17085. desugaredDeclarations.push(declaration);
  17086. }
  17087. });
  17088. var transformedTree = this.transformVariableDeclarationList(createVariableDeclarationList(tree.declarationType, desugaredDeclarations));
  17089. return transformedTree;
  17090. },
  17091. transformForInStatement: function(tree) {
  17092. return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForInStatement"), ForInStatement);
  17093. },
  17094. transformForOfStatement: function(tree) {
  17095. return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForOfStatement"), ForOfStatement);
  17096. },
  17097. transformForOnStatement: function(tree) {
  17098. return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForOnStatement"), ForOnStatement);
  17099. },
  17100. transformForInOrOfOrOn_: function(tree, superMethod, constr) {
  17101. var $__6;
  17102. if (!tree.initializer.isPattern() && (tree.initializer.type !== VARIABLE_DECLARATION_LIST || !hasDestructuring(tree.initializer))) {
  17103. return superMethod.call(this, tree);
  17104. }
  17105. this.pushTempScope();
  17106. var declarationType,
  17107. lvalue;
  17108. if (tree.initializer.isPattern()) {
  17109. declarationType = null;
  17110. lvalue = tree.initializer;
  17111. } else {
  17112. declarationType = tree.initializer.declarationType;
  17113. lvalue = tree.initializer.declarations[0].lvalue;
  17114. }
  17115. var statements = [];
  17116. var binding = this.desugarBinding_(lvalue, statements, declarationType);
  17117. var initializer = createVariableDeclarationList(VAR, binding, null);
  17118. var collection = this.transformAny(tree.collection);
  17119. var body = this.transformAny(tree.body);
  17120. if (body.type === BLOCK)
  17121. ($__6 = statements).push.apply($__6, $traceurRuntime.spread(body.statements));
  17122. else
  17123. statements.push(body);
  17124. body = createBlock(statements);
  17125. this.popTempScope();
  17126. return new constr(tree.location, initializer, collection, body);
  17127. },
  17128. transformAssignmentElement: function(tree) {
  17129. throw new Error('unreachable');
  17130. },
  17131. transformBindingElement: function(tree) {
  17132. if (!tree.binding.isPattern() || tree.initializer)
  17133. return tree;
  17134. if (this.parameterDeclarations === null) {
  17135. this.parameterDeclarations = [];
  17136. this.pushTempScope();
  17137. }
  17138. var varName = this.getTempIdentifier();
  17139. var binding = createBindingIdentifier(varName);
  17140. var initializer = createIdentifierExpression(varName);
  17141. var decl = createVariableDeclaration(tree.binding, initializer);
  17142. this.parameterDeclarations.push(decl);
  17143. return new BindingElement(null, binding, null);
  17144. },
  17145. transformFunctionBody: function(tree) {
  17146. if (this.parameterDeclarations === null)
  17147. return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformFunctionBody").call(this, tree);
  17148. var list = createVariableDeclarationList(VAR, this.parameterDeclarations);
  17149. var statement = createVariableStatement(list);
  17150. var statements = prependStatements(tree.statements, statement);
  17151. var newBody = createFunctionBody(statements);
  17152. this.parameterDeclarations = null;
  17153. var result = $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformFunctionBody").call(this, newBody);
  17154. this.popTempScope();
  17155. return result;
  17156. },
  17157. transformCatch: function(tree) {
  17158. var $__6;
  17159. if (!tree.binding.isPattern())
  17160. return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformCatch").call(this, tree);
  17161. var body = this.transformAny(tree.catchBody);
  17162. var statements = [];
  17163. var kind = this.options.blockBinding ? LET : VAR;
  17164. var binding = this.desugarBinding_(tree.binding, statements, kind);
  17165. ($__6 = statements).push.apply($__6, $traceurRuntime.spread(body.statements));
  17166. return new Catch(tree.location, binding, createBlock(statements));
  17167. },
  17168. transformExportDeclaration: function(tree) {
  17169. if (tree.declaration.type === VARIABLE_STATEMENT && hasDestructuring(tree.declaration.declarations)) {
  17170. var names = bindingsInDestructuringPattern(tree.declaration.declarations);
  17171. var declaration = this.transformAny(tree.declaration);
  17172. var statements = [];
  17173. var $__5 = declaration.declarations,
  17174. declarations = $__5.declarations,
  17175. declarationType = $__5.declarationType;
  17176. for (var i = 0; i < declarations.length; i++) {
  17177. var declaration$__7 = declarations[i];
  17178. var statement = new VariableStatement(declaration$__7.location, new VariableDeclarationList(declaration$__7.location, declarationType, [declaration$__7]));
  17179. if (names.has(declarations[i].lvalue.getStringValue())) {
  17180. statement = new ExportDeclaration(statement.location, statement, []);
  17181. }
  17182. statements.push(statement);
  17183. }
  17184. return new AnonBlock(null, statements);
  17185. }
  17186. return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformExportDeclaration").call(this, tree);
  17187. },
  17188. desugarBinding_: function(bindingTree, statements, declarationType) {
  17189. var varName = this.getTempIdentifier();
  17190. var binding = createBindingIdentifier(varName);
  17191. var idExpr = createIdentifierExpression(varName);
  17192. var desugaring;
  17193. if (declarationType === null)
  17194. desugaring = new AssignmentExpressionDesugaring(idExpr);
  17195. else
  17196. desugaring = new VariableDeclarationDesugaring(idExpr);
  17197. this.desugarPattern_(desugaring, bindingTree);
  17198. if (declarationType === null) {
  17199. statements.push(createExpressionStatement(createCommaExpression(desugaring.expressions)));
  17200. } else {
  17201. statements.push(createVariableStatement(this.transformVariableDeclarationList(createVariableDeclarationList(declarationType, desugaring.declarations))));
  17202. }
  17203. return binding;
  17204. },
  17205. desugarVariableDeclaration_: function(tree) {
  17206. var tempRValueName = this.getTempIdentifier();
  17207. var tempRValueIdent = createIdentifierExpression(tempRValueName);
  17208. var desugaring;
  17209. var initializer;
  17210. switch (tree.initializer.type) {
  17211. case ARRAY_LITERAL:
  17212. case CALL_EXPRESSION:
  17213. case IDENTIFIER_EXPRESSION:
  17214. case LITERAL_EXPRESSION:
  17215. case MEMBER_EXPRESSION:
  17216. case MEMBER_LOOKUP_EXPRESSION:
  17217. case OBJECT_LITERAL:
  17218. case PAREN_EXPRESSION:
  17219. initializer = tree.initializer;
  17220. }
  17221. desugaring = new VariableDeclarationDesugaring(tempRValueIdent);
  17222. desugaring.assign(desugaring.rvalue, tree.initializer);
  17223. var initializerFound = this.desugarPattern_(desugaring, tree.lvalue);
  17224. if (initializerFound || desugaring.declarations.length > 2) {
  17225. return desugaring.declarations;
  17226. }
  17227. if (!initializer) {
  17228. initializer = createParenExpression(tree.initializer);
  17229. }
  17230. desugaring = new VariableDeclarationDesugaring(initializer);
  17231. this.desugarPattern_(desugaring, tree.lvalue);
  17232. return desugaring.declarations;
  17233. },
  17234. desugarPattern_: function(desugaring, tree) {
  17235. var $__4 = this;
  17236. var initializerFound = false;
  17237. var pattern;
  17238. switch (tree.type) {
  17239. case ARRAY_PATTERN:
  17240. {
  17241. pattern = tree;
  17242. this.pushTempScope();
  17243. var iterId = createIdentifierExpression(this.addTempVar());
  17244. var iterObjectId = createIdentifierExpression(this.addTempVar());
  17245. desugaring.createIterator(iterId);
  17246. for (var i = 0; i < pattern.elements.length; i++) {
  17247. var lvalue = pattern.elements[i];
  17248. if (lvalue === null) {
  17249. desugaring.skipHole(iterId);
  17250. continue;
  17251. } else if (lvalue.isSpreadPatternElement()) {
  17252. var iteratorToArray = this.getRuntimeExpression('iteratorToArray');
  17253. desugaring.assign(lvalue.lvalue, parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), iteratorToArray, iterId));
  17254. } else {
  17255. if (lvalue.initializer) {
  17256. initializerFound = true;
  17257. }
  17258. desugaring.assign(lvalue, this.createConditionalIterExpression(iterObjectId, iterId, lvalue.initializer));
  17259. }
  17260. }
  17261. this.popTempScope();
  17262. break;
  17263. }
  17264. case OBJECT_PATTERN:
  17265. {
  17266. pattern = tree;
  17267. var elementHelper = function(lvalue, initializer) {
  17268. if (initializer)
  17269. initializerFound = true;
  17270. var lookup = $__4.createConditionalMemberExpression(desugaring.rvalue, lvalue, initializer);
  17271. desugaring.assign(lvalue, lookup);
  17272. };
  17273. pattern.fields.forEach(function(field) {
  17274. var lookup;
  17275. switch (field.type) {
  17276. case ASSIGNMENT_ELEMENT:
  17277. elementHelper(field.assignment, field.initializer);
  17278. break;
  17279. case BINDING_ELEMENT:
  17280. elementHelper(field.binding, field.initializer);
  17281. break;
  17282. case OBJECT_PATTERN_FIELD:
  17283. {
  17284. if (field.element.initializer)
  17285. initializerFound = true;
  17286. var name = field.name;
  17287. lookup = $__4.createConditionalMemberExpression(desugaring.rvalue, name, field.element.initializer);
  17288. desugaring.assign(field.element, lookup);
  17289. break;
  17290. }
  17291. default:
  17292. throw Error('unreachable');
  17293. }
  17294. });
  17295. break;
  17296. }
  17297. case PAREN_EXPRESSION:
  17298. return this.desugarPattern_(desugaring, tree.expression);
  17299. default:
  17300. throw new Error('unreachable');
  17301. }
  17302. if (desugaring instanceof VariableDeclarationDesugaring && desugaring.declarations.length === 0) {
  17303. desugaring.assign(createBindingIdentifier(this.getTempIdentifier()), desugaring.rvalue);
  17304. }
  17305. return initializerFound;
  17306. },
  17307. createConditionalMemberExpression: function(rvalue, name, initializer) {
  17308. if (name.type === COMPUTED_PROPERTY_NAME) {
  17309. return this.createConditionalMemberLookupExpression(rvalue, name.expression, initializer);
  17310. }
  17311. var token;
  17312. switch (name.type) {
  17313. case BINDING_IDENTIFIER:
  17314. case IDENTIFIER_EXPRESSION:
  17315. token = name.identifierToken;
  17316. break;
  17317. default:
  17318. token = name.literalToken;
  17319. }
  17320. if (!initializer)
  17321. return createMemberExpression(rvalue, token);
  17322. var tempIdent = createIdentifierExpression(this.addTempVar());
  17323. return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", ".", ") === void 0 ?\n ", " : ", ""]), tempIdent, rvalue, token, initializer, tempIdent);
  17324. },
  17325. createConditionalMemberLookupExpression: function(rvalue, index, initializer) {
  17326. if (!initializer)
  17327. return createMemberLookupExpression(rvalue, index);
  17328. var tempIdent = createIdentifierExpression(this.addTempVar());
  17329. return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", "[", "]) === void 0 ?\n ", " : ", ""]), tempIdent, rvalue, index, initializer, tempIdent);
  17330. },
  17331. createConditionalIterExpression: function(iterObjectId, iterId, initializer) {
  17332. var expr = parseExpression($traceurRuntime.getTemplateObject(["(", " =\n ", ".next()).done ? void 0 : ", ".value"]), iterObjectId, iterId, iterObjectId);
  17333. if (!initializer) {
  17334. return expr;
  17335. }
  17336. var tempIdent = createIdentifierExpression(this.addTempVar());
  17337. return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", ") === void 0 ?\n ", " : ", ""]), tempIdent, expr, initializer, tempIdent);
  17338. }
  17339. }, {}, $__super);
  17340. }(ImportRuntimeTrait(TempVarTransformer));
  17341. function hasDestructuring(tree) {
  17342. return tree.declarations.some(function(declaration) {
  17343. return declaration.lvalue.isPattern();
  17344. });
  17345. }
  17346. return {get DestructuringTransformer() {
  17347. return DestructuringTransformer;
  17348. }};
  17349. });
  17350. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js", [], function() {
  17351. "use strict";
  17352. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js";
  17353. var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringMap.js", "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js")).StringMap;
  17354. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js")).assert;
  17355. var ExportsList = function() {
  17356. function ExportsList(normalizedName) {
  17357. this.exports_ = new StringMap();
  17358. if (normalizedName !== null)
  17359. this.normalizedName = normalizedName.replace(/\\/g, '/');
  17360. else
  17361. this.normalizedName = null;
  17362. }
  17363. return ($traceurRuntime.createClass)(ExportsList, {
  17364. addExport: function(name, tree) {
  17365. assert(!this.exports_.has(name));
  17366. this.exports_.set(name, tree);
  17367. },
  17368. getExport: function(name) {
  17369. return this.exports_.get(name);
  17370. },
  17371. getExports: function() {
  17372. return this.exports_.keysAsArray();
  17373. },
  17374. addExportsFromModule: function(module) {
  17375. var $__2 = this;
  17376. Object.getOwnPropertyNames(module).forEach(function(name) {
  17377. $__2.addExport(name, true);
  17378. });
  17379. }
  17380. }, {});
  17381. }();
  17382. var ModuleSymbol = function($__super) {
  17383. function ModuleSymbol(tree, normalizedName) {
  17384. $traceurRuntime.superConstructor(ModuleSymbol).call(this, normalizedName);
  17385. this.tree = tree;
  17386. this.imports_ = new StringMap();
  17387. }
  17388. return ($traceurRuntime.createClass)(ModuleSymbol, {
  17389. addImport: function(name, tree) {
  17390. assert(!this.imports_.has(name));
  17391. this.imports_.set(name, tree);
  17392. },
  17393. getImport: function(name) {
  17394. return this.imports_.get(name);
  17395. }
  17396. }, {}, $__super);
  17397. }(ExportsList);
  17398. return {
  17399. get ExportsList() {
  17400. return ExportsList;
  17401. },
  17402. get ModuleSymbol() {
  17403. return ModuleSymbol;
  17404. }
  17405. };
  17406. });
  17407. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js", [], function() {
  17408. "use strict";
  17409. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js";
  17410. var ExportsList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleSymbol.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")).ExportsList;
  17411. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")).ParseTreeVisitor;
  17412. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")),
  17413. EXPORT_DECLARATION = $__3.EXPORT_DECLARATION,
  17414. IMPORT_DECLARATION = $__3.IMPORT_DECLARATION;
  17415. var ModuleVisitor = function($__super) {
  17416. function ModuleVisitor(reporter, loader, moduleSymbol) {
  17417. $traceurRuntime.superConstructor(ModuleVisitor).call(this);
  17418. this.reporter = reporter;
  17419. this.loader_ = loader;
  17420. this.moduleSymbol = moduleSymbol;
  17421. }
  17422. return ($traceurRuntime.createClass)(ModuleVisitor, {
  17423. getExportsListForModuleSpecifier: function(name) {
  17424. var referrer = this.moduleSymbol.normalizedName;
  17425. return this.loader_.getExportsListForModuleSpecifier(name, referrer);
  17426. },
  17427. visitFunctionDeclaration: function(tree) {},
  17428. visitFunctionExpression: function(tree) {},
  17429. visitFunctionBody: function(tree) {},
  17430. visitBlock: function(tree) {},
  17431. visitClassDeclaration: function(tree) {},
  17432. visitClassExpression: function(tree) {},
  17433. visitModuleElement_: function(element) {
  17434. switch (element.type) {
  17435. case EXPORT_DECLARATION:
  17436. case IMPORT_DECLARATION:
  17437. this.visitAny(element);
  17438. }
  17439. },
  17440. visitScript: function(tree) {
  17441. tree.scriptItemList.forEach(this.visitModuleElement_, this);
  17442. },
  17443. visitModule: function(tree) {
  17444. tree.scriptItemList.forEach(this.visitModuleElement_, this);
  17445. },
  17446. reportError: function(tree, message) {
  17447. this.reporter.reportError(tree.location, message);
  17448. }
  17449. }, {}, $__super);
  17450. }(ParseTreeVisitor);
  17451. return {get ModuleVisitor() {
  17452. return ModuleVisitor;
  17453. }};
  17454. });
  17455. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ExportVisitor.js", [], function() {
  17456. "use strict";
  17457. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js";
  17458. var ModuleVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js")).ModuleVisitor;
  17459. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js")).assert;
  17460. var ExportVisitor = function($__super) {
  17461. function ExportVisitor(reporter, loader, moduleSymbol) {
  17462. $traceurRuntime.superConstructor(ExportVisitor).call(this, reporter, loader, moduleSymbol);
  17463. this.inExport_ = false;
  17464. this.moduleSpecifier = null;
  17465. }
  17466. return ($traceurRuntime.createClass)(ExportVisitor, {
  17467. addExport_: function(name, tree) {
  17468. assert(typeof name === 'string');
  17469. if (this.inExport_)
  17470. this.addExport(name, tree);
  17471. },
  17472. addExport: function(name, tree) {
  17473. var moduleSymbol = this.moduleSymbol;
  17474. var existingExport = moduleSymbol.getExport(name);
  17475. if (existingExport) {
  17476. this.reportError(tree, ("Duplicate export. '" + name + "' was previously ") + ("exported at " + existingExport.location.start));
  17477. } else {
  17478. moduleSymbol.addExport(name, tree);
  17479. }
  17480. },
  17481. visitClassDeclaration: function(tree) {
  17482. this.addExport_(tree.name.identifierToken.value, tree);
  17483. },
  17484. visitExportDeclaration: function(tree) {
  17485. this.inExport_ = true;
  17486. this.visitAny(tree.declaration);
  17487. this.inExport_ = false;
  17488. },
  17489. visitNamedExport: function(tree) {
  17490. this.moduleSpecifier = tree.moduleSpecifier;
  17491. this.visitAny(tree.exportClause);
  17492. this.moduleSpecifier = null;
  17493. },
  17494. visitExportDefault: function(tree) {
  17495. this.addExport_('default', tree);
  17496. },
  17497. visitExportSpecifier: function(tree) {
  17498. this.addExport_((tree.rhs || tree.lhs).value, tree);
  17499. },
  17500. visitExportStar: function(tree) {
  17501. var $__1 = this;
  17502. var name = this.moduleSpecifier.token.processedValue;
  17503. var exportList = this.getExportsListForModuleSpecifier(name);
  17504. if (exportList) {
  17505. exportList.getExports().forEach(function(name) {
  17506. return $__1.addExport(name, tree);
  17507. });
  17508. }
  17509. },
  17510. visitNameSpaceExport: function(tree) {
  17511. this.addExport_(tree.name.value, tree);
  17512. },
  17513. visitForwardDefaultExport: function(tree) {
  17514. this.addExport_(tree.name.value, tree);
  17515. },
  17516. visitFunctionDeclaration: function(tree) {
  17517. this.addExport_(tree.name.getStringValue(), tree);
  17518. },
  17519. visitVariableDeclaration: function(tree) {
  17520. this.visitAny(tree.lvalue);
  17521. },
  17522. visitBindingIdentifier: function(tree) {
  17523. this.addExport_(tree.getStringValue(), tree);
  17524. },
  17525. visitBindingElement: function(tree) {
  17526. this.visitAny(tree.binding);
  17527. },
  17528. visitTypeAliasDeclaration: function(tree) {
  17529. this.addExport(tree.name.value, tree);
  17530. }
  17531. }, {}, $__super);
  17532. }(ModuleVisitor);
  17533. return {get ExportVisitor() {
  17534. return ExportVisitor;
  17535. }};
  17536. });
  17537. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js", [], function() {
  17538. "use strict";
  17539. var __moduleName = "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js";
  17540. var ExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExportVisitor.js", "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js")).ExportVisitor;
  17541. var TYPE_ALIAS_DECLARATION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js")).TYPE_ALIAS_DECLARATION;
  17542. var DirectExportVisitor = function($__super) {
  17543. function DirectExportVisitor() {
  17544. $traceurRuntime.superConstructor(DirectExportVisitor).call(this, null, null, null);
  17545. this.namedExports = [];
  17546. this.starExports = [];
  17547. }
  17548. return ($traceurRuntime.createClass)(DirectExportVisitor, {
  17549. addExport: function(name, tree) {
  17550. this.namedExports.push({
  17551. name: name,
  17552. tree: tree,
  17553. moduleSpecifier: this.moduleSpecifier
  17554. });
  17555. },
  17556. visitExportStar: function(tree) {
  17557. this.starExports.push(this.moduleSpecifier);
  17558. },
  17559. hasExports: function() {
  17560. return this.namedExports.length !== 0 || this.starExports.length !== 0;
  17561. },
  17562. getNonTypeNamedExports: function() {
  17563. return this.namedExports.filter(function(exp) {
  17564. return exp.tree.type !== TYPE_ALIAS_DECLARATION;
  17565. });
  17566. }
  17567. }, {}, $__super);
  17568. }(ExportVisitor);
  17569. return {get DirectExportVisitor() {
  17570. return DirectExportVisitor;
  17571. }};
  17572. });
  17573. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js", [], function() {
  17574. "use strict";
  17575. var __moduleName = "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js";
  17576. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")),
  17577. AnonBlock = $__5.AnonBlock,
  17578. ImportDeclaration = $__5.ImportDeclaration,
  17579. ImportSpecifier = $__5.ImportSpecifier,
  17580. ImportSpecifierSet = $__5.ImportSpecifierSet,
  17581. Module = $__5.Module;
  17582. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")).ParseTreeTransformer;
  17583. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")),
  17584. ANON_BLOCK = $__7.ANON_BLOCK,
  17585. IMPORT_CLAUSE_PAIR = $__7.IMPORT_CLAUSE_PAIR,
  17586. IMPORT_DECLARATION = $__7.IMPORT_DECLARATION,
  17587. IMPORT_SPECIFIER_SET = $__7.IMPORT_SPECIFIER_SET,
  17588. IMPORTED_BINDING = $__7.IMPORTED_BINDING,
  17589. NAME_SPACE_IMPORT = $__7.NAME_SPACE_IMPORT;
  17590. var createIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")).createIdentifierToken;
  17591. var ImportSimplifyingTransformer = function($__super) {
  17592. function ImportSimplifyingTransformer() {
  17593. $traceurRuntime.superConstructor(ImportSimplifyingTransformer).apply(this, arguments);
  17594. }
  17595. return ($traceurRuntime.createClass)(ImportSimplifyingTransformer, {
  17596. transformModule: function(tree) {
  17597. var $__2;
  17598. var statements = [];
  17599. for (var i = 0; i < tree.scriptItemList.length; i++) {
  17600. var item = tree.scriptItemList[i];
  17601. switch (item.type) {
  17602. case IMPORT_DECLARATION:
  17603. {
  17604. var transformed = this.transformAny(item);
  17605. if (transformed.type === ANON_BLOCK) {
  17606. ($__2 = statements).push.apply($__2, $traceurRuntime.spread(transformed.statements));
  17607. } else {
  17608. statements.push(transformed);
  17609. }
  17610. break;
  17611. }
  17612. default:
  17613. statements.push(item);
  17614. }
  17615. }
  17616. return new Module(tree.location, statements, tree.moduleName);
  17617. },
  17618. transformImportDeclaration: function(tree) {
  17619. var importClause = tree.importClause;
  17620. if (importClause === null) {
  17621. var set = new ImportSpecifierSet(null, []);
  17622. return new ImportDeclaration(tree.location, set, tree.moduleSpecifier);
  17623. }
  17624. if (importClause.type === NAME_SPACE_IMPORT) {
  17625. return tree;
  17626. }
  17627. if (importClause.type === IMPORTED_BINDING) {
  17628. var specifier = this.transformAny(importClause);
  17629. var set$__3 = new ImportSpecifierSet(null, [specifier]);
  17630. return new ImportDeclaration(tree.location, set$__3, tree.moduleSpecifier);
  17631. }
  17632. if (importClause.type === IMPORT_CLAUSE_PAIR) {
  17633. var $__1 = importClause,
  17634. first = $__1.first,
  17635. second = $__1.second;
  17636. if (second.type === IMPORT_SPECIFIER_SET) {
  17637. var defaultSpecifier = this.transformAny(first);
  17638. var specifiers = $traceurRuntime.spread([defaultSpecifier], second.specifiers);
  17639. var set$__4 = new ImportSpecifierSet(first.location, specifiers);
  17640. return new ImportDeclaration(tree.location, set$__4, tree.moduleSpecifier);
  17641. }
  17642. var firstImport = new ImportDeclaration(tree.location, first, tree.moduleSpecifier);
  17643. firstImport = this.transformAny(firstImport);
  17644. var secondImport = new ImportDeclaration(tree.location, second, tree.moduleSpecifier);
  17645. return new AnonBlock(null, [firstImport, secondImport]);
  17646. }
  17647. return $traceurRuntime.superGet(this, ImportSimplifyingTransformer.prototype, "transformImportDeclaration").call(this, tree);
  17648. },
  17649. transformImportSpecifier: function(tree) {
  17650. return tree;
  17651. },
  17652. transformImportedBinding: function(tree) {
  17653. var name = createIdentifierToken('default');
  17654. return new ImportSpecifier(tree.location, tree, name);
  17655. }
  17656. }, {}, $__super);
  17657. }(ParseTreeTransformer);
  17658. return {get ImportSimplifyingTransformer() {
  17659. return ImportSimplifyingTransformer;
  17660. }};
  17661. });
  17662. $traceurRuntime.registerModule("traceur@0.0.112/src/util/url.js", [], function() {
  17663. "use strict";
  17664. var __moduleName = "traceur@0.0.112/src/util/url.js";
  17665. var canonicalizeUrl = $traceurRuntime.canonicalizeUrl;
  17666. var isAbsolute = $traceurRuntime.isAbsolute;
  17667. var removeDotSegments = $traceurRuntime.removeDotSegments;
  17668. var resolveUrl = $traceurRuntime.resolveUrl;
  17669. return {
  17670. get canonicalizeUrl() {
  17671. return canonicalizeUrl;
  17672. },
  17673. get isAbsolute() {
  17674. return isAbsolute;
  17675. },
  17676. get removeDotSegments() {
  17677. return removeDotSegments;
  17678. },
  17679. get resolveUrl() {
  17680. return resolveUrl;
  17681. }
  17682. };
  17683. });
  17684. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js", [], function() {
  17685. "use strict";
  17686. var __moduleName = "traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js";
  17687. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js")),
  17688. ArrowFunction = $__1.ArrowFunction,
  17689. FunctionDeclaration = $__1.FunctionDeclaration,
  17690. FunctionExpression = $__1.FunctionExpression,
  17691. GetAccessor = $__1.GetAccessor,
  17692. Method = $__1.Method,
  17693. SetAccessor = $__1.SetAccessor;
  17694. function SkipFunctionsTransformerTrait(ParseTreeTransformer) {
  17695. return function($__super) {
  17696. function SkipFunctionsTransformer() {
  17697. $traceurRuntime.superConstructor(SkipFunctionsTransformer).apply(this, arguments);
  17698. }
  17699. return ($traceurRuntime.createClass)(SkipFunctionsTransformer, {
  17700. transformFunctionDeclaration: function(tree) {
  17701. var annotations = this.transformList(tree.annotations);
  17702. if (annotations === tree.annotations) {
  17703. return tree;
  17704. }
  17705. return new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, annotations, tree.body);
  17706. },
  17707. transformFunctionExpression: function(tree) {
  17708. var annotations = this.transformList(tree.annotations);
  17709. if (annotations === tree.annotations) {
  17710. return tree;
  17711. }
  17712. return new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, annotations, tree.body);
  17713. },
  17714. transformSetAccessor: function(tree) {
  17715. var name = this.transformAny(tree.name);
  17716. var annotations = this.transformList(tree.annotations);
  17717. if (name === tree.name && annotations === tree.annotations) {
  17718. return tree;
  17719. }
  17720. return new SetAccessor(tree.location, tree.isStatic, name, tree.parameterList, annotations, tree.body);
  17721. },
  17722. transformGetAccessor: function(tree) {
  17723. var name = this.transformAny(tree.name);
  17724. var annotations = this.transformList(tree.annotations);
  17725. if (name === tree.name && annotations === tree.annotations) {
  17726. return tree;
  17727. }
  17728. return new GetAccessor(tree.location, tree.isStatic, name, annotations, tree.body);
  17729. },
  17730. transformMethod: function(tree) {
  17731. var name = this.transformAny(tree.name);
  17732. var annotations = this.transformList(tree.annotations);
  17733. if (name === tree.name && annotations === tree.annotations) {
  17734. return tree;
  17735. }
  17736. return new Method(tree.location, tree.isStatic, tree.functionKind, name, tree.parameterList, tree.typeAnnotation, annotations, tree.body, tree.debugName);
  17737. },
  17738. transformArrowFunction: function(tree) {
  17739. return tree;
  17740. }
  17741. }, {}, $__super);
  17742. }(ParseTreeTransformer);
  17743. }
  17744. return {get default() {
  17745. return SkipFunctionsTransformerTrait;
  17746. }};
  17747. });
  17748. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ModuleTransformer.js", [], function() {
  17749. "use strict";
  17750. var __moduleName = "traceur@0.0.112/src/codegeneration/ModuleTransformer.js";
  17751. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")),
  17752. AnonBlock = $__8.AnonBlock,
  17753. BindingElement = $__8.BindingElement,
  17754. EmptyStatement = $__8.EmptyStatement,
  17755. LiteralPropertyName = $__8.LiteralPropertyName,
  17756. Module = $__8.Module,
  17757. ObjectPattern = $__8.ObjectPattern,
  17758. ObjectPatternField = $__8.ObjectPatternField,
  17759. Script = $__8.Script;
  17760. var DestructuringTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DestructuringTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).DestructuringTransformer;
  17761. var DirectExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./module/DirectExportVisitor.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).DirectExportVisitor;
  17762. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).default;
  17763. var ImportSimplifyingTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportSimplifyingTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).ImportSimplifyingTransformer;
  17764. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).TempVarTransformer;
  17765. var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")),
  17766. CLASS_DECLARATION = $__14.CLASS_DECLARATION,
  17767. EXPORT_DEFAULT = $__14.EXPORT_DEFAULT,
  17768. EXPORT_SPECIFIER = $__14.EXPORT_SPECIFIER,
  17769. FORWARD_DEFAULT_EXPORT = $__14.FORWARD_DEFAULT_EXPORT,
  17770. FUNCTION_DECLARATION = $__14.FUNCTION_DECLARATION,
  17771. IMPORT_SPECIFIER_SET = $__14.IMPORT_SPECIFIER_SET,
  17772. IMPORT_TYPE_CLAUSE = $__14.IMPORT_TYPE_CLAUSE,
  17773. NAME_SPACE_EXPORT = $__14.NAME_SPACE_EXPORT;
  17774. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).VAR;
  17775. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).assert;
  17776. var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")),
  17777. resolveUrl = $__17.resolveUrl,
  17778. canonicalizeUrl = $__17.canonicalizeUrl;
  17779. var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")),
  17780. createArgumentList = $__18.createArgumentList,
  17781. createExpressionStatement = $__18.createExpressionStatement,
  17782. createIdentifierExpression = $__18.createIdentifierExpression,
  17783. createIdentifierToken = $__18.createIdentifierToken,
  17784. createMemberExpression = $__18.createMemberExpression,
  17785. createObjectLiteral = $__18.createObjectLiteral,
  17786. createUseStrictDirective = $__18.createUseStrictDirective,
  17787. createVariableStatement = $__18.createVariableStatement,
  17788. createVoid0 = $__18.createVoid0;
  17789. var $__19 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")),
  17790. parseExpression = $__19.parseExpression,
  17791. parsePropertyDefinition = $__19.parsePropertyDefinition,
  17792. parseStatement = $__19.parseStatement,
  17793. parseStatements = $__19.parseStatements;
  17794. var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).default;
  17795. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).ParseTreeTransformer;
  17796. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).prependStatements;
  17797. function removeUseStrictDirectives(tree) {
  17798. var result = tree.scriptItemList.filter(function(tree) {
  17799. return !tree.isUseStrictDirective();
  17800. });
  17801. return new Module(tree.location, result, tree.moduleName);
  17802. }
  17803. var DestructImportVarStatement = function($__super) {
  17804. function DestructImportVarStatement() {
  17805. $traceurRuntime.superConstructor(DestructImportVarStatement).apply(this, arguments);
  17806. }
  17807. return ($traceurRuntime.createClass)(DestructImportVarStatement, {createGuardedExpression: function(tree) {
  17808. return tree;
  17809. }}, {}, $__super);
  17810. }(DestructuringTransformer);
  17811. var ModuleTransformer = function($__super) {
  17812. function ModuleTransformer(identifierGenerator, reporter, options) {
  17813. $traceurRuntime.superConstructor(ModuleTransformer).call(this, identifierGenerator, reporter, options);
  17814. this.exportVisitor = new DirectExportVisitor();
  17815. this.importSimplifier_ = new ImportSimplifyingTransformer();
  17816. this.moduleName = null;
  17817. }
  17818. return ($traceurRuntime.createClass)(ModuleTransformer, {
  17819. getTempVarNameForModuleName: function(moduleName) {
  17820. return '$__' + moduleName.replace(/[^a-zA-Z0-9$]/g, function(c) {
  17821. return '_' + String(c.charCodeAt(0)) + '_';
  17822. }) + '__';
  17823. },
  17824. getModuleName: function(tree) {
  17825. return tree.moduleName;
  17826. },
  17827. getTempVarNameForModuleSpecifier: function(moduleSpecifier) {
  17828. var name = moduleSpecifier.token.processedValue;
  17829. if (name[0] === '.' && this.moduleName) {
  17830. name = resolveUrl(this.moduleName, name);
  17831. } else {
  17832. name = canonicalizeUrl(name);
  17833. }
  17834. return this.getTempVarNameForModuleName(name);
  17835. },
  17836. transformScript: function(tree) {
  17837. this.moduleName = tree.moduleName;
  17838. return $traceurRuntime.superGet(this, ModuleTransformer.prototype, "transformScript").call(this, tree);
  17839. },
  17840. transformModule: function(tree) {
  17841. tree = removeUseStrictDirectives(tree);
  17842. tree = this.importSimplifier_.transformModule(tree);
  17843. var replaceThis = new ReplaceThis();
  17844. tree = replaceThis.transformAny(tree);
  17845. this.moduleName = this.getModuleName(tree);
  17846. this.pushTempScope();
  17847. var statements = this.transformList(tree.scriptItemList);
  17848. statements = this.addExportStatement(statements);
  17849. var runtimeImports = this.transformList(this.getRuntimeImports());
  17850. statements = prependStatements.apply((void 0), $traceurRuntime.spread([statements], runtimeImports));
  17851. this.popTempScope();
  17852. statements = this.wrapModule(this.moduleProlog().concat(statements));
  17853. return new Script(tree.location, statements, null);
  17854. },
  17855. moduleProlog: function() {
  17856. var statements = [createUseStrictDirective()];
  17857. if (this.moduleName) {
  17858. statements.push(parseStatement($traceurRuntime.getTemplateObject(["var __moduleName = ", ";"]), this.moduleName));
  17859. }
  17860. return statements;
  17861. },
  17862. wrapModule: function(statements) {
  17863. var functionExpression;
  17864. if (this.options.transformOptions.require) {
  17865. functionExpression = parseExpression($traceurRuntime.getTemplateObject(["function(require) {\n ", "\n }"]), statements);
  17866. } else {
  17867. functionExpression = parseExpression($traceurRuntime.getTemplateObject(["function() {\n ", "\n }"]), statements);
  17868. }
  17869. if (this.moduleName === null) {
  17870. return parseStatements($traceurRuntime.getTemplateObject(["$traceurRuntime.ModuleStore.getAnonymousModule(\n ", ");"]), functionExpression);
  17871. }
  17872. return parseStatements($traceurRuntime.getTemplateObject(["$traceurRuntime.registerModule(", ", [], ", ");"]), this.moduleName, functionExpression);
  17873. },
  17874. getGetterExport: function(exp) {
  17875. var returnExpression = this.getGetterExportReturnExpression(exp);
  17876. return parsePropertyDefinition($traceurRuntime.getTemplateObject(["get ", "() { return ", "; }"]), exp.name, returnExpression);
  17877. },
  17878. getGetterExportReturnExpression: function($__4) {
  17879. var $__5 = $__4,
  17880. name = $__5.name,
  17881. tree = $__5.tree,
  17882. moduleSpecifier = $__5.moduleSpecifier;
  17883. var returnExpression;
  17884. switch (tree.type) {
  17885. case EXPORT_DEFAULT:
  17886. switch (tree.expression.type) {
  17887. case CLASS_DECLARATION:
  17888. case FUNCTION_DECLARATION:
  17889. return createIdentifierExpression(tree.expression.name);
  17890. default:
  17891. return createIdentifierExpression('$__default');
  17892. }
  17893. break;
  17894. case EXPORT_SPECIFIER:
  17895. if (moduleSpecifier) {
  17896. var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier);
  17897. return createMemberExpression(idName, tree.lhs);
  17898. }
  17899. return createIdentifierExpression(tree.lhs);
  17900. case NAME_SPACE_EXPORT:
  17901. {
  17902. var idName$__6 = this.getTempVarNameForModuleSpecifier(moduleSpecifier);
  17903. return createIdentifierExpression(idName$__6);
  17904. }
  17905. case FORWARD_DEFAULT_EXPORT:
  17906. {
  17907. var idName$__7 = this.getTempVarNameForModuleSpecifier(moduleSpecifier);
  17908. return createMemberExpression(idName$__7, 'default');
  17909. }
  17910. default:
  17911. return createIdentifierExpression(name);
  17912. }
  17913. },
  17914. getExportProperties: function() {
  17915. var $__3 = this;
  17916. return this.exportVisitor.getNonTypeNamedExports().map(function(exp) {
  17917. return $__3.getGetterExport(exp);
  17918. }).concat(this.exportVisitor.namedExports.map(function(exp) {
  17919. return $__3.getSetterExport(exp);
  17920. })).filter(function(e) {
  17921. return e;
  17922. });
  17923. },
  17924. getSetterExport: function($__4) {
  17925. var $__5 = $__4,
  17926. name = $__5.name,
  17927. tree = $__5.tree,
  17928. moduleSpecifier = $__5.moduleSpecifier;
  17929. return null;
  17930. },
  17931. getExportObject: function() {
  17932. var exportObject = createObjectLiteral(this.getExportProperties());
  17933. if (this.hasStarExports()) {
  17934. return this.getExportStar(exportObject);
  17935. }
  17936. return exportObject;
  17937. },
  17938. getExportStar: function(exportObject) {
  17939. var $__3 = this;
  17940. var starExports = this.exportVisitor.starExports;
  17941. var starIdents = starExports.map(function(moduleSpecifier) {
  17942. return createIdentifierExpression($__3.getTempVarNameForModuleSpecifier(moduleSpecifier));
  17943. });
  17944. var args = createArgumentList($traceurRuntime.spread([exportObject], starIdents));
  17945. var runtime = this.getRuntimeExpression('exportStar');
  17946. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), runtime, args);
  17947. },
  17948. addExportStatement: function(statements) {
  17949. var exportObject = this.getExportObject();
  17950. statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", ""]), exportObject));
  17951. return statements;
  17952. },
  17953. hasExports: function() {
  17954. return this.exportVisitor.hasExports();
  17955. },
  17956. hasStarExports: function() {
  17957. return this.exportVisitor.starExports.length > 0;
  17958. },
  17959. transformExportDeclaration: function(tree) {
  17960. this.exportVisitor.visitAny(tree);
  17961. return this.transformAny(tree.declaration);
  17962. },
  17963. transformExportDefault: function(tree) {
  17964. switch (tree.expression.type) {
  17965. case CLASS_DECLARATION:
  17966. case FUNCTION_DECLARATION:
  17967. return tree.expression;
  17968. }
  17969. return parseStatement($traceurRuntime.getTemplateObject(["var $__default = ", ""]), tree.expression);
  17970. },
  17971. transformNamedExport: function(tree) {
  17972. var moduleSpecifier = tree.moduleSpecifier;
  17973. if (moduleSpecifier) {
  17974. var expression = this.transformAny(moduleSpecifier);
  17975. var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier);
  17976. return createVariableStatement(VAR, idName, expression);
  17977. }
  17978. return new AnonBlock(null, []);
  17979. },
  17980. transformModuleSpecifier: function(tree) {
  17981. assert(this.moduleName);
  17982. var name = tree.token.processedValue;
  17983. return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.getModule(\n $traceurRuntime.normalizeModuleName(", ", ", "));"]), name, this.moduleName);
  17984. },
  17985. transformImportDeclaration: function(tree) {
  17986. if (tree.importClause.type === IMPORT_TYPE_CLAUSE) {
  17987. return new AnonBlock(null, []);
  17988. }
  17989. if (tree.importClause.type === IMPORT_SPECIFIER_SET && tree.importClause.specifiers.length === 0) {
  17990. return createExpressionStatement(this.transformAny(tree.moduleSpecifier));
  17991. }
  17992. var binding = this.transformAny(tree.importClause);
  17993. var initializer = this.transformAny(tree.moduleSpecifier);
  17994. var varStatement = createVariableStatement(VAR, binding, initializer);
  17995. if (this.options.transformOptions.destructuring || !this.options.parseOptions.destructuring) {
  17996. var destructuringTransformer = new DestructImportVarStatement(this.identifierGenerator, this.reporter, this.options);
  17997. varStatement = varStatement.transform(destructuringTransformer);
  17998. }
  17999. return varStatement;
  18000. },
  18001. transformImportSpecifierSet: function(tree) {
  18002. var fields = this.transformList(tree.specifiers);
  18003. return new ObjectPattern(null, fields);
  18004. },
  18005. transformNameSpaceImport: function(tree) {
  18006. return tree.binding.binding;
  18007. },
  18008. transformImportSpecifier: function(tree) {
  18009. var binding = tree.binding.binding;
  18010. var bindingElement = new BindingElement(binding.location, binding, null);
  18011. if (tree.name) {
  18012. var name = new LiteralPropertyName(tree.name.location, tree.name);
  18013. return new ObjectPatternField(tree.location, name, bindingElement);
  18014. }
  18015. return bindingElement;
  18016. }
  18017. }, {}, $__super);
  18018. }(ImportRuntimeTrait(TempVarTransformer));
  18019. var ReplaceThis = function($__super) {
  18020. function ReplaceThis() {
  18021. $traceurRuntime.superConstructor(ReplaceThis).apply(this, arguments);
  18022. }
  18023. return ($traceurRuntime.createClass)(ReplaceThis, {transformThisExpression: function(tree) {
  18024. return createVoid0();
  18025. }}, {}, $__super);
  18026. }(SkipFunctionsTransformerTrait(ParseTreeTransformer));
  18027. return {get ModuleTransformer() {
  18028. return ModuleTransformer;
  18029. }};
  18030. });
  18031. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/globalThis.js", [], function() {
  18032. "use strict";
  18033. var __moduleName = "traceur@0.0.112/src/codegeneration/globalThis.js";
  18034. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/globalThis.js")).parseExpression;
  18035. var expr;
  18036. function globalThis() {
  18037. if (!expr)
  18038. expr = parseExpression($traceurRuntime.getTemplateObject(["Reflect.global"]));
  18039. return expr;
  18040. }
  18041. var $__default = globalThis;
  18042. return {get default() {
  18043. return $__default;
  18044. }};
  18045. });
  18046. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AmdTransformer.js", [], function() {
  18047. "use strict";
  18048. var __moduleName = "traceur@0.0.112/src/codegeneration/AmdTransformer.js";
  18049. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")).ModuleTransformer;
  18050. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")),
  18051. createIdentifierExpression = $__3.createIdentifierExpression,
  18052. createFormalParameter = $__3.createFormalParameter,
  18053. createStringLiteralToken = $__3.createStringLiteralToken;
  18054. var globalThis = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./globalThis.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")).default;
  18055. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")),
  18056. parseExpression = $__5.parseExpression,
  18057. parseStatement = $__5.parseStatement,
  18058. parseStatements = $__5.parseStatements,
  18059. parsePropertyDefinition = $__5.parsePropertyDefinition;
  18060. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")),
  18061. FormalParameterList = $__6.FormalParameterList,
  18062. FunctionBody = $__6.FunctionBody,
  18063. FunctionExpression = $__6.FunctionExpression;
  18064. var AmdTransformer = function($__super) {
  18065. function AmdTransformer(identifierGenerator, reporter) {
  18066. var options = arguments[2];
  18067. $traceurRuntime.superConstructor(AmdTransformer).call(this, identifierGenerator, reporter, options);
  18068. this.dependencies = [];
  18069. this.anonymousModule = options && !options.bundle && options.moduleName !== true;
  18070. }
  18071. return ($traceurRuntime.createClass)(AmdTransformer, {
  18072. getModuleName: function(tree) {
  18073. if (this.anonymousModule)
  18074. return null;
  18075. return tree.moduleName;
  18076. },
  18077. getExportProperties: function() {
  18078. var properties = $traceurRuntime.superGet(this, AmdTransformer.prototype, "getExportProperties").call(this);
  18079. if (this.exportVisitor.hasExports())
  18080. properties.push(parsePropertyDefinition($traceurRuntime.getTemplateObject(["__esModule: true"])));
  18081. return properties;
  18082. },
  18083. moduleProlog: function() {
  18084. var locals = this.dependencies.map(function(dep) {
  18085. var local = createIdentifierExpression(dep.local);
  18086. return parseStatement($traceurRuntime.getTemplateObject(["if (!", " || !", ".__esModule)\n ", " = {default: ", "}"]), local, local, local, local);
  18087. });
  18088. return $traceurRuntime.superGet(this, AmdTransformer.prototype, "moduleProlog").call(this).concat(locals);
  18089. },
  18090. wrapModule: function(statements) {
  18091. var depPaths = this.dependencies.map(function(dep) {
  18092. return dep.path;
  18093. });
  18094. var formals = this.dependencies.map(function(dep) {
  18095. return createFormalParameter(dep.local);
  18096. });
  18097. var parameterList = new FormalParameterList(null, formals);
  18098. var body = new FunctionBody(null, statements);
  18099. var func = new FunctionExpression(null, null, null, parameterList, null, [], body);
  18100. if (this.moduleName) {
  18101. return parseStatements($traceurRuntime.getTemplateObject(["define(", ", ", ", ", ");"]), this.moduleName, depPaths, func);
  18102. } else {
  18103. return parseStatements($traceurRuntime.getTemplateObject(["define(", ", ", ");"]), depPaths, func);
  18104. }
  18105. },
  18106. transformModuleSpecifier: function(tree) {
  18107. var localName = this.getTempIdentifier();
  18108. var value = tree.token.processedValue;
  18109. var stringLiteral = createStringLiteralToken(value.replace(/\.js$/, ''));
  18110. this.dependencies.push({
  18111. path: stringLiteral,
  18112. local: localName
  18113. });
  18114. return createIdentifierExpression(localName);
  18115. }
  18116. }, {}, $__super);
  18117. }(ModuleTransformer);
  18118. return {get AmdTransformer() {
  18119. return AmdTransformer;
  18120. }};
  18121. });
  18122. $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/PropName.js", [], function() {
  18123. "use strict";
  18124. var __moduleName = "traceur@0.0.112/src/staticsemantics/PropName.js";
  18125. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/staticsemantics/PropName.js")),
  18126. COMPUTED_PROPERTY_NAME = $__0.COMPUTED_PROPERTY_NAME,
  18127. GET_ACCESSOR = $__0.GET_ACCESSOR,
  18128. LITERAL_PROPERTY_NAME = $__0.LITERAL_PROPERTY_NAME,
  18129. METHOD = $__0.METHOD,
  18130. PROPERTY_NAME_ASSIGNMENT = $__0.PROPERTY_NAME_ASSIGNMENT,
  18131. PROPERTY_NAME_SHORTHAND = $__0.PROPERTY_NAME_SHORTHAND,
  18132. SET_ACCESSOR = $__0.SET_ACCESSOR;
  18133. var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/staticsemantics/PropName.js")).IDENTIFIER;
  18134. function propName(tree) {
  18135. switch (tree.type) {
  18136. case LITERAL_PROPERTY_NAME:
  18137. {
  18138. var token = tree.literalToken;
  18139. if (token.isKeyword() || token.type === IDENTIFIER)
  18140. return token.toString();
  18141. return String(tree.literalToken.processedValue);
  18142. }
  18143. case COMPUTED_PROPERTY_NAME:
  18144. return '';
  18145. case PROPERTY_NAME_SHORTHAND:
  18146. return tree.name.toString();
  18147. case METHOD:
  18148. case PROPERTY_NAME_ASSIGNMENT:
  18149. case GET_ACCESSOR:
  18150. case SET_ACCESSOR:
  18151. return propName(tree.name);
  18152. }
  18153. }
  18154. return {get propName() {
  18155. return propName;
  18156. }};
  18157. });
  18158. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js", [], function() {
  18159. "use strict";
  18160. var __moduleName = "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js";
  18161. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).ParseTreeTransformer;
  18162. var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).CONSTRUCTOR;
  18163. var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).STRING;
  18164. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")),
  18165. AnonBlock = $__8.AnonBlock,
  18166. ClassDeclaration = $__8.ClassDeclaration,
  18167. ExportDeclaration = $__8.ExportDeclaration,
  18168. FormalParameter = $__8.FormalParameter,
  18169. FunctionDeclaration = $__8.FunctionDeclaration,
  18170. GetAccessor = $__8.GetAccessor,
  18171. LiteralExpression = $__8.LiteralExpression,
  18172. Method = $__8.Method,
  18173. SetAccessor = $__8.SetAccessor;
  18174. var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).propName;
  18175. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")),
  18176. createArgumentList = $__10.createArgumentList,
  18177. createArrayLiteral = $__10.createArrayLiteral,
  18178. createAssignmentStatement = $__10.createAssignmentStatement,
  18179. createIdentifierExpression = $__10.createIdentifierExpression,
  18180. createMemberExpression = $__10.createMemberExpression,
  18181. createNewExpression = $__10.createNewExpression,
  18182. createStringLiteralToken = $__10.createStringLiteralToken;
  18183. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")),
  18184. parseExpression = $__11.parseExpression,
  18185. parseStatement = $__11.parseStatement;
  18186. var AnnotationsScope = function() {
  18187. function AnnotationsScope() {
  18188. this.className = null;
  18189. this.isExport = false;
  18190. this.constructorParameters = [];
  18191. this.annotations = [];
  18192. this.metadata = [];
  18193. }
  18194. return ($traceurRuntime.createClass)(AnnotationsScope, {get inClassScope() {
  18195. return this.className !== null;
  18196. }}, {});
  18197. }();
  18198. var AnnotationsTransformer = function($__super) {
  18199. function AnnotationsTransformer() {
  18200. $traceurRuntime.superConstructor(AnnotationsTransformer).call(this);
  18201. this.stack_ = [new AnnotationsScope()];
  18202. }
  18203. return ($traceurRuntime.createClass)(AnnotationsTransformer, {
  18204. transformExportDeclaration: function(tree) {
  18205. var $__3;
  18206. var scope = this.pushAnnotationScope_();
  18207. scope.isExport = true;
  18208. ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(tree.annotations));
  18209. var declaration = this.transformAny(tree.declaration);
  18210. if (declaration !== tree.declaration || tree.annotations.length > 0)
  18211. tree = new ExportDeclaration(tree.location, declaration, []);
  18212. return this.appendMetadata_(tree);
  18213. },
  18214. transformClassDeclaration: function(tree) {
  18215. var $__3,
  18216. $__4;
  18217. var elementsChanged = false;
  18218. var exportAnnotations = this.scope.isExport ? this.scope.annotations : [];
  18219. var scope = this.pushAnnotationScope_();
  18220. scope.className = tree.name;
  18221. ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(exportAnnotations, tree.annotations));
  18222. tree = $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformClassDeclaration").call(this, tree);
  18223. ($__4 = scope.metadata).unshift.apply($__4, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, scope.constructorParameters)));
  18224. if (tree.annotations.length > 0) {
  18225. tree = new ClassDeclaration(tree.location, tree.name, tree.superClass, tree.elements, [], null);
  18226. }
  18227. return this.appendMetadata_(tree);
  18228. },
  18229. transformFunctionDeclaration: function(tree) {
  18230. var $__3,
  18231. $__4;
  18232. var exportAnnotations = this.scope.isExport ? this.scope.annotations : [];
  18233. var scope = this.pushAnnotationScope_();
  18234. ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(exportAnnotations, tree.annotations));
  18235. ($__4 = scope.metadata).push.apply($__4, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, tree.parameterList.parameters)));
  18236. tree = $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  18237. if (tree.annotations.length > 0) {
  18238. tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, [], tree.body);
  18239. }
  18240. return this.appendMetadata_(tree);
  18241. },
  18242. transformFormalParameter: function(tree) {
  18243. if (tree.annotations.length > 0) {
  18244. tree = new FormalParameter(tree.location, tree.parameter, tree.typeAnnotation, []);
  18245. }
  18246. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformFormalParameter").call(this, tree);
  18247. },
  18248. transformGetAccessor: function(tree) {
  18249. var $__3;
  18250. if (!this.scope.inClassScope)
  18251. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformGetAccessor").call(this, tree);
  18252. ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'get'), tree.annotations, [])));
  18253. if (tree.annotations.length > 0) {
  18254. tree = new GetAccessor(tree.location, tree.isStatic, tree.name, tree.typeAnnotation, [], tree.body);
  18255. }
  18256. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformGetAccessor").call(this, tree);
  18257. },
  18258. transformSetAccessor: function(tree) {
  18259. var $__3;
  18260. if (!this.scope.inClassScope)
  18261. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformSetAccessor").call(this, tree);
  18262. ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'set'), tree.annotations, tree.parameterList.parameters)));
  18263. var parameterList = this.transformAny(tree.parameterList);
  18264. if (parameterList !== tree.parameterList || tree.annotations.length > 0) {
  18265. tree = new SetAccessor(tree.location, tree.isStatic, tree.name, parameterList, [], tree.body);
  18266. }
  18267. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformSetAccessor").call(this, tree);
  18268. },
  18269. transformMethod: function(tree) {
  18270. var $__3,
  18271. $__4;
  18272. if (!this.scope.inClassScope)
  18273. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformMethod").call(this, tree);
  18274. if (!tree.isStatic && propName(tree) === CONSTRUCTOR) {
  18275. ($__3 = this.scope.annotations).push.apply($__3, $traceurRuntime.spread(tree.annotations));
  18276. this.scope.constructorParameters = tree.parameterList.parameters;
  18277. } else {
  18278. ($__4 = this.scope.metadata).push.apply($__4, $traceurRuntime.spread(this.transformMetadata_(this.transformPropertyMethod_(tree, this.scope.className), tree.annotations, tree.parameterList.parameters)));
  18279. }
  18280. var parameterList = this.transformAny(tree.parameterList);
  18281. if (parameterList !== tree.parameterList || tree.annotations.length > 0) {
  18282. tree = new Method(tree.location, tree.isStatic, tree.functionKind, tree.name, parameterList, tree.typeAnnotation, [], tree.body, tree.debugName);
  18283. }
  18284. return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformMethod").call(this, tree);
  18285. },
  18286. appendMetadata_: function(tree) {
  18287. var $__3;
  18288. var metadata = this.stack_.pop().metadata;
  18289. if (metadata.length > 0) {
  18290. if (this.scope.isExport) {
  18291. ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(metadata));
  18292. } else {
  18293. tree = new AnonBlock(null, $traceurRuntime.spread([tree], metadata));
  18294. }
  18295. }
  18296. return tree;
  18297. },
  18298. transformClassReference_: function(tree, className) {
  18299. var parent = createIdentifierExpression(className);
  18300. if (!tree.isStatic)
  18301. parent = createMemberExpression(parent, 'prototype');
  18302. return parent;
  18303. },
  18304. transformPropertyMethod_: function(tree, className) {
  18305. return createMemberExpression(this.transformClassReference_(tree, className), tree.name.literalToken);
  18306. },
  18307. transformAccessor_: function(tree, className, accessor) {
  18308. var args = createArgumentList([this.transformClassReference_(tree, className), this.createLiteralStringExpression_(tree.name)]);
  18309. var descriptor = parseExpression($traceurRuntime.getTemplateObject(["Object.getOwnPropertyDescriptor(", ")"]), args);
  18310. return createMemberExpression(descriptor, accessor);
  18311. },
  18312. transformParameters_: function(parameters) {
  18313. var $__2 = this;
  18314. var hasParameterMetadata = false;
  18315. parameters = parameters.map(function(param) {
  18316. var $__3;
  18317. var metadata = [];
  18318. if (param.typeAnnotation)
  18319. metadata.push($__2.transformAny(param.typeAnnotation));
  18320. if (param.annotations && param.annotations.length > 0)
  18321. ($__3 = metadata).push.apply($__3, $traceurRuntime.spread($__2.transformAnnotations_(param.annotations)));
  18322. if (metadata.length > 0) {
  18323. hasParameterMetadata = true;
  18324. return createArrayLiteral(metadata);
  18325. }
  18326. return createArrayLiteral([]);
  18327. });
  18328. return hasParameterMetadata ? parameters : [];
  18329. },
  18330. transformAnnotations_: function(annotations) {
  18331. return annotations.map(function(annotation) {
  18332. return createNewExpression(annotation.name, annotation.args);
  18333. });
  18334. },
  18335. transformMetadata_: function(target, annotations, parameters) {
  18336. var metadataStatements = [];
  18337. if (annotations !== null) {
  18338. annotations = this.transformAnnotations_(annotations);
  18339. if (annotations.length > 0) {
  18340. metadataStatements.push(this.createDefinePropertyStatement_(target, 'annotations', createArrayLiteral(annotations)));
  18341. }
  18342. }
  18343. if (parameters !== null) {
  18344. parameters = this.transformParameters_(parameters);
  18345. if (parameters.length > 0) {
  18346. metadataStatements.push(this.createDefinePropertyStatement_(target, 'parameters', createArrayLiteral(parameters)));
  18347. }
  18348. }
  18349. return metadataStatements;
  18350. },
  18351. createDefinePropertyStatement_: function(target, property, value) {
  18352. return parseStatement($traceurRuntime.getTemplateObject(["Object.defineProperty(", ", ", ",\n {get: function() {return ", "}});"]), target, property, value);
  18353. },
  18354. createLiteralStringExpression_: function(tree) {
  18355. var token = tree.literalToken;
  18356. if (tree.literalToken.type !== STRING)
  18357. token = createStringLiteralToken(tree.literalToken.value);
  18358. return new LiteralExpression(null, token);
  18359. },
  18360. get scope() {
  18361. return this.stack_[this.stack_.length - 1];
  18362. },
  18363. pushAnnotationScope_: function() {
  18364. var scope = new AnnotationsScope();
  18365. this.stack_.push(scope);
  18366. return scope;
  18367. }
  18368. }, {}, $__super);
  18369. }(ParseTreeTransformer);
  18370. return {get AnnotationsTransformer() {
  18371. return AnnotationsTransformer;
  18372. }};
  18373. });
  18374. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindInFunctionScope.js", [], function() {
  18375. "use strict";
  18376. var __moduleName = "traceur@0.0.112/src/codegeneration/FindInFunctionScope.js";
  18377. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/FindInFunctionScope.js")).FindVisitor;
  18378. var FindInFunctionScope = function($__super) {
  18379. function FindInFunctionScope() {
  18380. $traceurRuntime.superConstructor(FindInFunctionScope).apply(this, arguments);
  18381. }
  18382. return ($traceurRuntime.createClass)(FindInFunctionScope, {
  18383. visitFunctionDeclaration: function(tree) {
  18384. this.visitList(tree.annotations);
  18385. },
  18386. visitFunctionExpression: function(tree) {
  18387. this.visitList(tree.annotations);
  18388. },
  18389. visitSetAccessor: function(tree) {
  18390. this.visitAny(tree.name);
  18391. this.visitList(tree.annotations);
  18392. },
  18393. visitGetAccessor: function(tree) {
  18394. this.visitAny(tree.name);
  18395. this.visitList(tree.annotations);
  18396. },
  18397. visitMethod: function(tree) {
  18398. this.visitAny(tree.name);
  18399. this.visitList(tree.annotations);
  18400. }
  18401. }, {}, $__super);
  18402. }(FindVisitor);
  18403. return {get FindInFunctionScope() {
  18404. return FindInFunctionScope;
  18405. }};
  18406. });
  18407. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/util.js", [], function() {
  18408. "use strict";
  18409. var __moduleName = "traceur@0.0.112/src/semantics/util.js";
  18410. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/util.js")),
  18411. IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION,
  18412. LITERAL_EXPRESSION = $__0.LITERAL_EXPRESSION,
  18413. PAREN_EXPRESSION = $__0.PAREN_EXPRESSION,
  18414. UNARY_EXPRESSION = $__0.UNARY_EXPRESSION;
  18415. var UNDEFINED = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/semantics/util.js")).UNDEFINED;
  18416. var VOID = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/util.js")).VOID;
  18417. function hasUseStrict(list) {
  18418. for (var i = 0; i < list.length; i++) {
  18419. if (!list[i].isDirectivePrologue())
  18420. return false;
  18421. if (list[i].isUseStrictDirective())
  18422. return true;
  18423. }
  18424. return false;
  18425. }
  18426. function isUndefined(tree) {
  18427. if (tree.type === PAREN_EXPRESSION)
  18428. return isUndefined(tree.expression);
  18429. return tree.type === IDENTIFIER_EXPRESSION && tree.identifierToken.value === UNDEFINED;
  18430. }
  18431. function isVoidExpression(tree) {
  18432. if (tree.type === PAREN_EXPRESSION)
  18433. return isVoidExpression(tree.expression);
  18434. return tree.type === UNARY_EXPRESSION && tree.operator.type === VOID && isLiteralExpression(tree.operand);
  18435. }
  18436. function isLiteralExpression(tree) {
  18437. if (tree.type === PAREN_EXPRESSION)
  18438. return isLiteralExpression(tree.expression);
  18439. return tree.type === LITERAL_EXPRESSION;
  18440. }
  18441. return {
  18442. get hasUseStrict() {
  18443. return hasUseStrict;
  18444. },
  18445. get isUndefined() {
  18446. return isUndefined;
  18447. },
  18448. get isVoidExpression() {
  18449. return isVoidExpression;
  18450. },
  18451. get isLiteralExpression() {
  18452. return isLiteralExpression;
  18453. }
  18454. };
  18455. });
  18456. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/isTreeStrict.js", [], function() {
  18457. "use strict";
  18458. var __moduleName = "traceur@0.0.112/src/semantics/isTreeStrict.js";
  18459. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/isTreeStrict.js")),
  18460. ARROW_FUNCTION = $__0.ARROW_FUNCTION,
  18461. CLASS_DECLARATION = $__0.CLASS_DECLARATION,
  18462. CLASS_EXPRESSION = $__0.CLASS_EXPRESSION,
  18463. FUNCTION_BODY = $__0.FUNCTION_BODY,
  18464. FUNCTION_DECLARATION = $__0.FUNCTION_DECLARATION,
  18465. FUNCTION_EXPRESSION = $__0.FUNCTION_EXPRESSION,
  18466. GET_ACCESSOR = $__0.GET_ACCESSOR,
  18467. METHOD = $__0.METHOD,
  18468. MODULE = $__0.MODULE,
  18469. SCRIPT = $__0.SCRIPT,
  18470. SET_ACCESSOR = $__0.SET_ACCESSOR;
  18471. var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util.js", "traceur@0.0.112/src/semantics/isTreeStrict.js")).hasUseStrict;
  18472. function isTreeStrict(tree) {
  18473. switch (tree.type) {
  18474. case CLASS_DECLARATION:
  18475. case CLASS_EXPRESSION:
  18476. case MODULE:
  18477. return true;
  18478. case FUNCTION_BODY:
  18479. return hasUseStrict(tree.statements);
  18480. case FUNCTION_EXPRESSION:
  18481. case FUNCTION_DECLARATION:
  18482. case METHOD:
  18483. return isTreeStrict(tree.body);
  18484. case ARROW_FUNCTION:
  18485. if (tree.body.type === FUNCTION_BODY) {
  18486. return isTreeStrict(tree.body);
  18487. }
  18488. return false;
  18489. case GET_ACCESSOR:
  18490. case SET_ACCESSOR:
  18491. return isTreeStrict(tree.body);
  18492. case SCRIPT:
  18493. return hasUseStrict(tree.scriptItemList);
  18494. default:
  18495. return false;
  18496. }
  18497. }
  18498. return {get isTreeStrict() {
  18499. return isTreeStrict;
  18500. }};
  18501. });
  18502. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/Scope.js", [], function() {
  18503. "use strict";
  18504. var __moduleName = "traceur@0.0.112/src/semantics/Scope.js";
  18505. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/Scope.js")),
  18506. BLOCK = $__2.BLOCK,
  18507. CATCH = $__2.CATCH,
  18508. FUNCTION_EXPRESSION = $__2.FUNCTION_EXPRESSION;
  18509. var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringMap.js", "traceur@0.0.112/src/semantics/Scope.js")).StringMap;
  18510. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/Scope.js")).VAR;
  18511. var isTreeStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./isTreeStrict.js", "traceur@0.0.112/src/semantics/Scope.js")).isTreeStrict;
  18512. function reportDuplicateVar(reporter, tree, name) {
  18513. reporter.reportError(tree.location, ("Duplicate declaration, " + name));
  18514. }
  18515. var Scope = function() {
  18516. function Scope(parent, tree) {
  18517. this.parent = parent;
  18518. this.tree = tree;
  18519. this.variableDeclarations_ = new StringMap();
  18520. this.lexicalDeclarations_ = new StringMap();
  18521. this.strictMode = parent && parent.strictMode || isTreeStrict(tree);
  18522. this.inGenerator = parent ? parent.inGenerator || false : false;
  18523. }
  18524. return ($traceurRuntime.createClass)(Scope, {
  18525. addBinding: function(tree, type, reporter) {
  18526. if (type === VAR) {
  18527. this.addVar(tree, reporter);
  18528. } else {
  18529. this.addDeclaration(tree, type, reporter);
  18530. }
  18531. },
  18532. addVar: function(tree, reporter) {
  18533. var name = tree.getStringValue();
  18534. if (this.lexicalDeclarations_.has(name) && !this.isFunctionExpressionName(name)) {
  18535. reportDuplicateVar(reporter, tree, name);
  18536. return;
  18537. }
  18538. this.variableDeclarations_.set(name, {
  18539. type: VAR,
  18540. tree: tree,
  18541. scope: this
  18542. });
  18543. if (!this.isVarScope && this.parent) {
  18544. this.parent.addVar(tree, reporter);
  18545. }
  18546. },
  18547. addDeclaration: function(tree, type, reporter) {
  18548. var name = tree.getStringValue();
  18549. if ((this.lexicalDeclarations_.has(name) || this.variableDeclarations_.has(name)) && !this.isFunctionExpressionName(name)) {
  18550. reportDuplicateVar(reporter, tree, name);
  18551. return;
  18552. }
  18553. this.lexicalDeclarations_.set(name, {
  18554. type: type,
  18555. tree: tree,
  18556. scope: this
  18557. });
  18558. },
  18559. renameBinding: function(oldName, newTree, newType, reporter) {
  18560. var name = newTree.getStringValue();
  18561. if (newType === VAR) {
  18562. if (this.lexicalDeclarations_.has(oldName)) {
  18563. this.lexicalDeclarations_.delete(oldName);
  18564. this.addVar(newTree, reporter);
  18565. }
  18566. } else if (this.variableDeclarations_.has(oldName)) {
  18567. this.variableDeclarations_.delete(oldName);
  18568. this.addDeclaration(newTree, newType, reporter);
  18569. if (!this.isVarScope && this.parent) {
  18570. this.parent.renameBinding(oldName, newTree, newType);
  18571. }
  18572. }
  18573. },
  18574. get isVarScope() {
  18575. switch (this.tree.type) {
  18576. case BLOCK:
  18577. case CATCH:
  18578. return false;
  18579. }
  18580. return true;
  18581. },
  18582. getVarScope: function() {
  18583. if (this.isVarScope) {
  18584. return this;
  18585. }
  18586. if (this.parent) {
  18587. return this.parent.getVarScope();
  18588. }
  18589. return null;
  18590. },
  18591. isFunctionExpressionName: function(name) {
  18592. var b = this.getBindingByName(name);
  18593. return b && b.scope.tree.type === FUNCTION_EXPRESSION && b.scope.tree.name === b.tree;
  18594. },
  18595. getBinding: function(tree) {
  18596. var name = tree.getStringValue();
  18597. return this.getBindingByName(name);
  18598. },
  18599. getBindingByName: function(name) {
  18600. var b = this.variableDeclarations_.get(name);
  18601. if (b && this.isVarScope) {
  18602. return b;
  18603. }
  18604. b = this.lexicalDeclarations_.get(name);
  18605. if (b) {
  18606. return b;
  18607. }
  18608. if (this.parent) {
  18609. return this.parent.getBindingByName(name);
  18610. }
  18611. return null;
  18612. },
  18613. getAllBindingNames: function() {
  18614. var names = this.variableDeclarations_.keysAsSet();
  18615. this.lexicalDeclarations_.forEach(function(name) {
  18616. return names.add(name);
  18617. });
  18618. return names;
  18619. },
  18620. getVariableBindingNames: function() {
  18621. return this.variableDeclarations_.keysAsSet();
  18622. },
  18623. getLexicalBindingNames: function() {
  18624. return this.lexicalDeclarations_.keysAsSet();
  18625. },
  18626. hasBindingName: function(name) {
  18627. return this.lexicalDeclarations_.has(name) || this.variableDeclarations_.has(name);
  18628. },
  18629. hasLexicalBindingName: function(name) {
  18630. return this.lexicalDeclarations_.has(name);
  18631. },
  18632. hasVariableBindingName: function(name) {
  18633. return this.variableDeclarations_.has(name);
  18634. }
  18635. }, {});
  18636. }();
  18637. return {get Scope() {
  18638. return Scope;
  18639. }};
  18640. });
  18641. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeVisitor.js", [], function() {
  18642. "use strict";
  18643. var __moduleName = "traceur@0.0.112/src/semantics/ScopeVisitor.js";
  18644. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).ParseTreeVisitor;
  18645. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).VAR;
  18646. var Scope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scope.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).Scope;
  18647. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")),
  18648. COMPREHENSION_FOR = $__6.COMPREHENSION_FOR,
  18649. VARIABLE_DECLARATION_LIST = $__6.VARIABLE_DECLARATION_LIST;
  18650. var ScopeVisitor = function($__super) {
  18651. function ScopeVisitor() {
  18652. $traceurRuntime.superConstructor(ScopeVisitor).call(this);
  18653. this.map_ = new Map();
  18654. this.scope = null;
  18655. this.withBlockCounter_ = 0;
  18656. }
  18657. return ($traceurRuntime.createClass)(ScopeVisitor, {
  18658. getScopeForTree: function(tree) {
  18659. return this.map_.get(tree);
  18660. },
  18661. createScope: function(tree) {
  18662. return new Scope(this.scope, tree);
  18663. },
  18664. pushScope: function(tree) {
  18665. var scope = this.createScope(tree);
  18666. this.map_.set(tree, scope);
  18667. return this.scope = scope;
  18668. },
  18669. popScope: function(scope) {
  18670. if (this.scope !== scope) {
  18671. throw new Error('ScopeVisitor scope mismatch');
  18672. }
  18673. this.scope = scope.parent;
  18674. },
  18675. visitScript: function(tree) {
  18676. var scope = this.pushScope(tree);
  18677. $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitScript").call(this, tree);
  18678. this.popScope(scope);
  18679. },
  18680. visitModule: function(tree) {
  18681. var scope = this.pushScope(tree);
  18682. $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitModule").call(this, tree);
  18683. this.popScope(scope);
  18684. },
  18685. visitBlock: function(tree) {
  18686. var scope = this.pushScope(tree);
  18687. $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitBlock").call(this, tree);
  18688. this.popScope(scope);
  18689. },
  18690. visitCatch: function(tree) {
  18691. var scope = this.pushScope(tree);
  18692. this.visitAny(tree.binding);
  18693. this.visitList(tree.catchBody.statements);
  18694. this.popScope(scope);
  18695. },
  18696. visitFunctionBodyForScope: function(tree) {
  18697. var parameterList = arguments[1] !== (void 0) ? arguments[1] : tree.parameterList;
  18698. var scope = this.pushScope(tree);
  18699. this.visitAny(parameterList);
  18700. scope.inGenerator = tree.functionKind && tree.isGenerator();
  18701. this.visitAny(tree.body);
  18702. this.popScope(scope);
  18703. },
  18704. visitFunctionExpression: function(tree) {
  18705. this.visitFunctionBodyForScope(tree);
  18706. },
  18707. visitFunctionDeclaration: function(tree) {
  18708. this.visitAny(tree.name);
  18709. this.visitFunctionBodyForScope(tree);
  18710. },
  18711. visitArrowFunction: function(tree) {
  18712. this.visitFunctionBodyForScope(tree);
  18713. },
  18714. visitGetAccessor: function(tree) {
  18715. this.visitFunctionBodyForScope(tree, null);
  18716. },
  18717. visitSetAccessor: function(tree) {
  18718. this.visitFunctionBodyForScope(tree);
  18719. },
  18720. visitMethod: function(tree) {
  18721. this.visitFunctionBodyForScope(tree);
  18722. },
  18723. visitClassDeclaration: function(tree) {
  18724. this.visitAny(tree.superClass);
  18725. var scope = this.pushScope(tree);
  18726. this.visitAny(tree.name);
  18727. this.visitList(tree.elements);
  18728. this.popScope(scope);
  18729. },
  18730. visitClassExpression: function(tree) {
  18731. this.visitAny(tree.superClass);
  18732. var scope;
  18733. if (tree.name) {
  18734. scope = this.pushScope(tree);
  18735. this.visitAny(tree.name);
  18736. }
  18737. this.visitList(tree.elements);
  18738. if (tree.name) {
  18739. this.popScope(scope);
  18740. }
  18741. },
  18742. visitWithStatement: function(tree) {
  18743. this.visitAny(tree.expression);
  18744. this.withBlockCounter_++;
  18745. this.visitAny(tree.body);
  18746. this.withBlockCounter_--;
  18747. },
  18748. get inWithBlock() {
  18749. return this.withBlockCounter_ > 0;
  18750. },
  18751. visitLoop_: function(tree, func) {
  18752. if (tree.initializer.type !== VARIABLE_DECLARATION_LIST || tree.initializer.declarationType === VAR) {
  18753. func();
  18754. return;
  18755. }
  18756. var scope = this.pushScope(tree);
  18757. func();
  18758. this.popScope(scope);
  18759. },
  18760. visitForInStatement: function(tree) {
  18761. var $__1 = this;
  18762. this.visitLoop_(tree, function() {
  18763. return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForInStatement").call($__1, tree);
  18764. });
  18765. },
  18766. visitForOfStatement: function(tree) {
  18767. var $__1 = this;
  18768. this.visitLoop_(tree, function() {
  18769. return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForOfStatement").call($__1, tree);
  18770. });
  18771. },
  18772. visitForStatement: function(tree) {
  18773. var $__1 = this;
  18774. if (!tree.initializer) {
  18775. $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitForStatement").call(this, tree);
  18776. } else {
  18777. this.visitLoop_(tree, function() {
  18778. return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForStatement").call($__1, tree);
  18779. });
  18780. }
  18781. },
  18782. visitComprehension_: function(tree) {
  18783. var scopes = [];
  18784. for (var i = 0; i < tree.comprehensionList.length; i++) {
  18785. var scope = null;
  18786. if (tree.comprehensionList[i].type === COMPREHENSION_FOR) {
  18787. scope = this.pushScope(tree.comprehensionList[i]);
  18788. }
  18789. scopes.push(scope);
  18790. this.visitAny(tree.comprehensionList[i]);
  18791. }
  18792. this.visitAny(tree.expression);
  18793. for (var i$__2 = scopes.length - 1; i$__2 >= 0; i$__2--) {
  18794. if (scopes[i$__2]) {
  18795. this.popScope(scopes[i$__2]);
  18796. }
  18797. }
  18798. },
  18799. visitArrayComprehension: function(tree) {
  18800. this.visitComprehension_(tree);
  18801. },
  18802. visitGeneratorComprehension: function(tree) {
  18803. this.visitComprehension_(tree);
  18804. },
  18805. visitPredefinedType: function(tree) {},
  18806. visitTypeArguments: function(tree) {},
  18807. visitFunctionType: function(tree) {}
  18808. }, {}, $__super);
  18809. }(ParseTreeVisitor);
  18810. return {get ScopeVisitor() {
  18811. return ScopeVisitor;
  18812. }};
  18813. });
  18814. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeChainBuilder.js", [], function() {
  18815. "use strict";
  18816. var __moduleName = "traceur@0.0.112/src/semantics/ScopeChainBuilder.js";
  18817. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilder.js")),
  18818. CONST = $__1.CONST,
  18819. LET = $__1.LET,
  18820. VAR = $__1.VAR;
  18821. var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeVisitor.js", "traceur@0.0.112/src/semantics/ScopeChainBuilder.js")).ScopeVisitor;
  18822. var ScopeChainBuilder = function($__super) {
  18823. function ScopeChainBuilder(reporter) {
  18824. $traceurRuntime.superConstructor(ScopeChainBuilder).call(this);
  18825. this.reporter = reporter;
  18826. this.declarationType_ = null;
  18827. }
  18828. return ($traceurRuntime.createClass)(ScopeChainBuilder, {
  18829. visitCatch: function(tree) {
  18830. var scope = this.pushScope(tree);
  18831. this.declarationType_ = LET;
  18832. this.visitAny(tree.binding);
  18833. this.visitList(tree.catchBody.statements);
  18834. this.popScope(scope);
  18835. },
  18836. visitImportedBinding: function(tree) {
  18837. this.declarationType_ = CONST;
  18838. $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitImportedBinding").call(this, tree);
  18839. },
  18840. visitVariableDeclarationList: function(tree) {
  18841. this.declarationType_ = tree.declarationType;
  18842. $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitVariableDeclarationList").call(this, tree);
  18843. },
  18844. visitBindingIdentifier: function(tree) {
  18845. this.declareVariable(tree);
  18846. },
  18847. visitFunctionExpression: function(tree) {
  18848. var scope = this.pushScope(tree);
  18849. if (tree.name) {
  18850. this.declarationType_ = CONST;
  18851. this.visitAny(tree.name);
  18852. }
  18853. this.visitAny(tree.parameterList);
  18854. scope.inGenerator = tree.isGenerator();
  18855. this.visitAny(tree.body);
  18856. this.popScope(scope);
  18857. },
  18858. visitFormalParameter: function(tree) {
  18859. this.declarationType_ = VAR;
  18860. $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitFormalParameter").call(this, tree);
  18861. },
  18862. visitFunctionDeclaration: function(tree) {
  18863. if (this.scope) {
  18864. if (this.scope.isVarScope) {
  18865. this.declarationType_ = VAR;
  18866. this.visitAny(tree.name);
  18867. } else {
  18868. if (!this.scope.strictMode) {
  18869. var varScope = this.scope.getVarScope();
  18870. if (varScope) {
  18871. varScope.addVar(tree.name, this.reporter);
  18872. }
  18873. }
  18874. this.declarationType_ = LET;
  18875. this.visitAny(tree.name);
  18876. }
  18877. }
  18878. this.visitFunctionBodyForScope(tree, tree.parameterList, tree.body);
  18879. },
  18880. visitClassDeclaration: function(tree) {
  18881. this.visitAny(tree.superClass);
  18882. this.declarationType_ = LET;
  18883. this.visitAny(tree.name);
  18884. var scope = this.pushScope(tree);
  18885. this.declarationType_ = CONST;
  18886. this.visitAny(tree.name);
  18887. this.visitList(tree.elements);
  18888. this.popScope(scope);
  18889. },
  18890. visitClassExpression: function(tree) {
  18891. this.visitAny(tree.superClass);
  18892. var scope;
  18893. if (tree.name) {
  18894. scope = this.pushScope(tree);
  18895. this.declarationType_ = CONST;
  18896. this.visitAny(tree.name);
  18897. }
  18898. this.visitList(tree.elements);
  18899. if (tree.name) {
  18900. this.popScope(scope);
  18901. }
  18902. },
  18903. visitComprehensionFor: function(tree) {
  18904. this.declarationType_ = LET;
  18905. $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitComprehensionFor").call(this, tree);
  18906. },
  18907. declareVariable: function(tree) {
  18908. this.scope.addBinding(tree, this.declarationType_, this.reporter);
  18909. }
  18910. }, {}, $__super);
  18911. }(ScopeVisitor);
  18912. return {get ScopeChainBuilder() {
  18913. return ScopeChainBuilder;
  18914. }};
  18915. });
  18916. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/VariableBinder.js", [], function() {
  18917. "use strict";
  18918. var __moduleName = "traceur@0.0.112/src/semantics/VariableBinder.js";
  18919. var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/VariableBinder.js")).ScopeChainBuilder;
  18920. function variablesInBlock(tree) {
  18921. var includeFunctionScope = arguments[1];
  18922. var builder = new ScopeChainBuilder(null);
  18923. builder.visitAny(tree);
  18924. var scope = builder.getScopeForTree(tree);
  18925. var names = scope.getLexicalBindingNames();
  18926. if (!includeFunctionScope) {
  18927. return names;
  18928. }
  18929. var variableBindingNames = scope.getVariableBindingNames();
  18930. variableBindingNames.forEach(function(name) {
  18931. return names.add(name);
  18932. });
  18933. return names;
  18934. }
  18935. function variablesInFunction(tree) {
  18936. var builder = new ScopeChainBuilder(null);
  18937. builder.visitAny(tree);
  18938. var scope = builder.getScopeForTree(tree);
  18939. return scope.getAllBindingNames();
  18940. }
  18941. return {
  18942. get variablesInBlock() {
  18943. return variablesInBlock;
  18944. },
  18945. get variablesInFunction() {
  18946. return variablesInFunction;
  18947. }
  18948. };
  18949. });
  18950. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ScopeTransformer.js", [], function() {
  18951. "use strict";
  18952. var __moduleName = "traceur@0.0.112/src/codegeneration/ScopeTransformer.js";
  18953. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")),
  18954. ARGUMENTS = $__4.ARGUMENTS,
  18955. THIS = $__4.THIS;
  18956. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).FindInFunctionScope;
  18957. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).ParseTreeTransformer;
  18958. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")),
  18959. FunctionDeclaration = $__7.FunctionDeclaration,
  18960. FunctionExpression = $__7.FunctionExpression,
  18961. GetAccessor = $__7.GetAccessor,
  18962. Method = $__7.Method,
  18963. SetAccessor = $__7.SetAccessor;
  18964. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).StringSet;
  18965. var VARIABLE_DECLARATION_LIST = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).VARIABLE_DECLARATION_LIST;
  18966. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).VAR;
  18967. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/VariableBinder.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")),
  18968. variablesInBlock = $__11.variablesInBlock,
  18969. variablesInFunction = $__11.variablesInFunction;
  18970. var FindNames = function($__super) {
  18971. function FindNames(names) {
  18972. $traceurRuntime.superConstructor(FindNames).call(this);
  18973. this.names = names;
  18974. }
  18975. return ($traceurRuntime.createClass)(FindNames, {visitBindingIdentifier: function(tree) {
  18976. this.names.add(tree.getStringValue());
  18977. }}, {}, $__super);
  18978. }(FindInFunctionScope);
  18979. function getLexicalBindingNames(tree) {
  18980. var names = new StringSet();
  18981. if (tree !== null && tree.type === VARIABLE_DECLARATION_LIST && tree.declarationType !== VAR) {
  18982. var visitor = new FindNames(names);
  18983. for (var i = 0; i < tree.declarations.length; i++) {
  18984. visitor.visitAny(tree.declarations[i].lvalue);
  18985. }
  18986. }
  18987. return names;
  18988. }
  18989. var ScopeTransformer = function($__super) {
  18990. function ScopeTransformer(varName) {
  18991. $traceurRuntime.superConstructor(ScopeTransformer).call(this);
  18992. this.varName_ = varName;
  18993. }
  18994. return ($traceurRuntime.createClass)(ScopeTransformer, {
  18995. transformBlock: function(tree) {
  18996. if (variablesInBlock(tree).has(this.varName_)) {
  18997. return tree;
  18998. }
  18999. return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformBlock").call(this, tree);
  19000. },
  19001. sameTreeIfNameInLoopInitializer_: function(tree) {
  19002. var names = getLexicalBindingNames(tree.initializer);
  19003. if (names.has(this.varName_)) {
  19004. return tree;
  19005. }
  19006. return null;
  19007. },
  19008. transformForStatement: function(tree) {
  19009. return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForStatement").call(this, tree);
  19010. },
  19011. transformForInStatement: function(tree) {
  19012. return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForInStatement").call(this, tree);
  19013. },
  19014. transformForOfStatement: function(tree) {
  19015. return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForOfStatement").call(this, tree);
  19016. },
  19017. transformForOnStatement: function(tree) {
  19018. return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForOnStatement").call(this, tree);
  19019. },
  19020. transformThisExpression: function(tree) {
  19021. if (this.varName_ !== THIS)
  19022. return tree;
  19023. return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformThisExpression").call(this, tree);
  19024. },
  19025. transformParameterListAndBody_: function(tree) {
  19026. if (this.getDoNotRecurse(tree))
  19027. return tree;
  19028. return {
  19029. parameterList: this.transformAny(tree.parameterList),
  19030. body: this.transformAny(tree.body)
  19031. };
  19032. },
  19033. transformFunctionDeclaration: function(tree) {
  19034. var name = this.transformAny(tree.name);
  19035. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19036. var annotations = this.transformList(tree.annotations);
  19037. var $__3 = this.transformParameterListAndBody_(tree),
  19038. parameterList = $__3.parameterList,
  19039. body = $__3.body;
  19040. if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  19041. return tree;
  19042. }
  19043. return new FunctionDeclaration(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);
  19044. },
  19045. transformFunctionExpression: function(tree) {
  19046. var name = this.transformAny(tree.name);
  19047. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19048. var annotations = this.transformList(tree.annotations);
  19049. var $__3 = this.transformParameterListAndBody_(tree),
  19050. parameterList = $__3.parameterList,
  19051. body = $__3.body;
  19052. if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  19053. return tree;
  19054. }
  19055. return new FunctionExpression(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body);
  19056. },
  19057. transformMethod: function(tree) {
  19058. var name = this.transformAny(tree.name);
  19059. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19060. var annotations = this.transformList(tree.annotations);
  19061. var $__3 = this.transformParameterListAndBody_(tree),
  19062. parameterList = $__3.parameterList,
  19063. body = $__3.body;
  19064. if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && parameterList === tree.parameterList && body === tree.body) {
  19065. return tree;
  19066. }
  19067. return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, typeAnnotation, annotations, body, tree.debugName);
  19068. },
  19069. transformGetAccessor: function(tree) {
  19070. var name = this.transformAny(tree.name);
  19071. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19072. var annotations = this.transformList(tree.annotations);
  19073. var body = this.getDoNotRecurse(tree) ? tree.body : this.transformAny(tree.body);
  19074. if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) {
  19075. return tree;
  19076. }
  19077. return new GetAccessor(tree.location, tree.isStatic, name, typeAnnotation, annotations, body);
  19078. },
  19079. transformSetAccessor: function(tree) {
  19080. var name = this.transformAny(tree.name);
  19081. var annotations = this.transformList(tree.annotations);
  19082. var $__3 = this.transformParameterListAndBody_(tree),
  19083. parameterList = $__3.parameterList,
  19084. body = $__3.body;
  19085. if (name === tree.name && annotations === tree.annotations && parameterList === tree.parameterList && body === tree.body) {
  19086. return tree;
  19087. }
  19088. return new SetAccessor(tree.location, tree.isStatic, name, parameterList, annotations, body);
  19089. },
  19090. getDoNotRecurse: function(tree) {
  19091. return this.varName_ === ARGUMENTS || this.varName_ === THIS || variablesInFunction(tree).has(this.varName_);
  19092. },
  19093. transformCatch: function(tree) {
  19094. if (!tree.binding.isPattern() && this.varName_ === tree.binding.identifierToken.value) {
  19095. return tree;
  19096. }
  19097. return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformCatch").call(this, tree);
  19098. }
  19099. }, {}, $__super);
  19100. }(ParseTreeTransformer);
  19101. return {get ScopeTransformer() {
  19102. return ScopeTransformer;
  19103. }};
  19104. });
  19105. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AlphaRenamer.js", [], function() {
  19106. "use strict";
  19107. var __moduleName = "traceur@0.0.112/src/codegeneration/AlphaRenamer.js";
  19108. var ScopeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeTransformer.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).ScopeTransformer;
  19109. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")),
  19110. FunctionDeclaration = $__2.FunctionDeclaration,
  19111. FunctionExpression = $__2.FunctionExpression;
  19112. var THIS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).THIS;
  19113. var createIdentifierExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).createIdentifierExpression;
  19114. var AlphaRenamer = function($__super) {
  19115. function AlphaRenamer(varName, newName) {
  19116. $traceurRuntime.superConstructor(AlphaRenamer).call(this, varName);
  19117. this.newName_ = newName;
  19118. }
  19119. return ($traceurRuntime.createClass)(AlphaRenamer, {
  19120. transformIdentifierExpression: function(tree) {
  19121. if (this.varName_ === tree.identifierToken.value) {
  19122. return createIdentifierExpression(this.newName_);
  19123. } else {
  19124. return tree;
  19125. }
  19126. },
  19127. transformThisExpression: function(tree) {
  19128. if (this.varName_ !== THIS)
  19129. return tree;
  19130. return createIdentifierExpression(this.newName_);
  19131. },
  19132. transformFunctionDeclaration: function(tree) {
  19133. if (this.varName_ === tree.name) {
  19134. tree = new FunctionDeclaration(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  19135. }
  19136. return $traceurRuntime.superGet(this, AlphaRenamer.prototype, "transformFunctionDeclaration").call(this, tree);
  19137. },
  19138. transformFunctionExpression: function(tree) {
  19139. if (this.varName_ === tree.name) {
  19140. tree = new FunctionExpression(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  19141. }
  19142. return $traceurRuntime.superGet(this, AlphaRenamer.prototype, "transformFunctionExpression").call(this, tree);
  19143. }
  19144. }, {rename: function(tree, varName, newName) {
  19145. return new AlphaRenamer(varName, newName).transformAny(tree);
  19146. }}, $__super);
  19147. }(ScopeTransformer);
  19148. return {get AlphaRenamer() {
  19149. return AlphaRenamer;
  19150. }};
  19151. });
  19152. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindThisOrArguments.js", [], function() {
  19153. "use strict";
  19154. var __moduleName = "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js";
  19155. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js")).ARGUMENTS;
  19156. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js")).FindInFunctionScope;
  19157. var FindThisOrArguments = function($__super) {
  19158. function FindThisOrArguments() {
  19159. $traceurRuntime.superConstructor(FindThisOrArguments).call(this);
  19160. this.foundThis = false;
  19161. this.foundArguments = false;
  19162. }
  19163. return ($traceurRuntime.createClass)(FindThisOrArguments, {
  19164. visitThisExpression: function(tree) {
  19165. this.foundThis = true;
  19166. this.found = this.foundArguments;
  19167. },
  19168. visitIdentifierExpression: function(tree) {
  19169. if (tree.identifierToken.value === ARGUMENTS) {
  19170. this.foundArguments = true;
  19171. this.found = this.foundThis;
  19172. }
  19173. }
  19174. }, {}, $__super);
  19175. }(FindInFunctionScope);
  19176. return {get FindThisOrArguments() {
  19177. return FindThisOrArguments;
  19178. }};
  19179. });
  19180. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js", [], function() {
  19181. "use strict";
  19182. var __moduleName = "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js";
  19183. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")),
  19184. ARGUMENTS = $__0.ARGUMENTS,
  19185. THIS = $__0.THIS;
  19186. var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")).AlphaRenamer;
  19187. var FindThisOrArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindThisOrArguments.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")).FindThisOrArguments;
  19188. function alphaRenameThisAndArguments(tempVarTransformer, tree) {
  19189. var finder = new FindThisOrArguments();
  19190. finder.visitAny(tree);
  19191. if (finder.foundArguments) {
  19192. var argumentsTempName = tempVarTransformer.addTempVarForArguments();
  19193. tree = AlphaRenamer.rename(tree, ARGUMENTS, argumentsTempName);
  19194. }
  19195. if (finder.foundThis) {
  19196. var thisTempName = tempVarTransformer.addTempVarForThis();
  19197. tree = AlphaRenamer.rename(tree, THIS, thisTempName);
  19198. }
  19199. return tree;
  19200. }
  19201. return {get default() {
  19202. return alphaRenameThisAndArguments;
  19203. }};
  19204. });
  19205. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js", [], function() {
  19206. "use strict";
  19207. var __moduleName = "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js";
  19208. var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).default;
  19209. var FunctionExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).FunctionExpression;
  19210. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).TempVarTransformer;
  19211. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")),
  19212. LET = $__4.LET,
  19213. STAR = $__4.STAR,
  19214. VAR = $__4.VAR;
  19215. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")),
  19216. COMPREHENSION_FOR = $__5.COMPREHENSION_FOR,
  19217. COMPREHENSION_IF = $__5.COMPREHENSION_IF;
  19218. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).Token;
  19219. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")),
  19220. createCallExpression = $__7.createCallExpression,
  19221. createEmptyParameterList = $__7.createEmptyParameterList,
  19222. createForOfStatement = $__7.createForOfStatement,
  19223. createFunctionBody = $__7.createFunctionBody,
  19224. createIfStatement = $__7.createIfStatement,
  19225. createParenExpression = $__7.createParenExpression,
  19226. createVariableDeclarationList = $__7.createVariableDeclarationList;
  19227. var ComprehensionTransformer = function($__super) {
  19228. function ComprehensionTransformer() {
  19229. $traceurRuntime.superConstructor(ComprehensionTransformer).apply(this, arguments);
  19230. }
  19231. return ($traceurRuntime.createClass)(ComprehensionTransformer, {transformComprehension: function(tree, statement, isGenerator) {
  19232. var prefix = arguments[3];
  19233. var suffix = arguments[4];
  19234. var bindingKind = isGenerator || !this.options.blockBinding ? VAR : LET;
  19235. var statements = prefix ? [prefix] : [];
  19236. for (var i = tree.comprehensionList.length - 1; i >= 0; i--) {
  19237. var item = tree.comprehensionList[i];
  19238. switch (item.type) {
  19239. case COMPREHENSION_IF:
  19240. {
  19241. var expression = this.transformAny(item.expression);
  19242. statement = createIfStatement(expression, statement);
  19243. break;
  19244. }
  19245. case COMPREHENSION_FOR:
  19246. {
  19247. var left = this.transformAny(item.left);
  19248. var iterator = this.transformAny(item.iterator);
  19249. var initializer = createVariableDeclarationList(bindingKind, left, null);
  19250. statement = createForOfStatement(initializer, iterator, statement);
  19251. break;
  19252. }
  19253. default:
  19254. throw new Error('Unreachable.');
  19255. }
  19256. }
  19257. statement = alphaRenameThisAndArguments(this, statement);
  19258. statements.push(statement);
  19259. if (suffix)
  19260. statements.push(suffix);
  19261. var functionKind = isGenerator ? new Token(STAR, null) : null;
  19262. var func = new FunctionExpression(null, null, functionKind, createEmptyParameterList(), null, [], createFunctionBody(statements));
  19263. return createParenExpression(createCallExpression(func));
  19264. }}, {}, $__super);
  19265. }(TempVarTransformer);
  19266. return {get ComprehensionTransformer() {
  19267. return ComprehensionTransformer;
  19268. }};
  19269. });
  19270. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js", [], function() {
  19271. "use strict";
  19272. var __moduleName = "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js";
  19273. var ComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).ComprehensionTransformer;
  19274. var createIdentifierExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).createIdentifierExpression;
  19275. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).parseStatement;
  19276. var ArrayComprehensionTransformer = function($__super) {
  19277. function ArrayComprehensionTransformer() {
  19278. $traceurRuntime.superConstructor(ArrayComprehensionTransformer).apply(this, arguments);
  19279. }
  19280. return ($traceurRuntime.createClass)(ArrayComprehensionTransformer, {transformArrayComprehension: function(tree) {
  19281. this.pushTempScope();
  19282. var expression = this.transformAny(tree.expression);
  19283. var index = createIdentifierExpression(this.getTempIdentifier());
  19284. var result = createIdentifierExpression(this.getTempIdentifier());
  19285. var tempVarsStatatement = parseStatement($traceurRuntime.getTemplateObject(["var ", " = 0, ", " = [];"]), index, result);
  19286. var statement = parseStatement($traceurRuntime.getTemplateObject(["", "[", "++] = ", ";"]), result, index, expression);
  19287. var returnStatement = parseStatement($traceurRuntime.getTemplateObject(["return ", ";"]), result);
  19288. var functionKind = null;
  19289. result = this.transformComprehension(tree, statement, functionKind, tempVarsStatatement, returnStatement);
  19290. this.popTempScope();
  19291. return result;
  19292. }}, {}, $__super);
  19293. }(ComprehensionTransformer);
  19294. return {get ArrayComprehensionTransformer() {
  19295. return ArrayComprehensionTransformer;
  19296. }};
  19297. });
  19298. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParenTrait.js", [], function() {
  19299. "use strict";
  19300. var __moduleName = "traceur@0.0.112/src/codegeneration/ParenTrait.js";
  19301. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParenTrait.js")),
  19302. ArgumentList = $__2.ArgumentList,
  19303. ArrayLiteral = $__2.ArrayLiteral,
  19304. BinaryExpression = $__2.BinaryExpression,
  19305. ConditionalExpression = $__2.ConditionalExpression,
  19306. ExpressionStatement = $__2.ExpressionStatement,
  19307. NewExpression = $__2.NewExpression,
  19308. ParenExpression = $__2.ParenExpression,
  19309. PropertyNameAssignment = $__2.PropertyNameAssignment,
  19310. VariableDeclaration = $__2.VariableDeclaration;
  19311. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ParenTrait.js")),
  19312. CALL_EXPRESSION = $__3.CALL_EXPRESSION,
  19313. COMMA_EXPRESSION = $__3.COMMA_EXPRESSION,
  19314. FUNCTION_EXPRESSION = $__3.FUNCTION_EXPRESSION,
  19315. OBJECT_LITERAL = $__3.OBJECT_LITERAL,
  19316. OBJECT_PATTERN = $__3.OBJECT_PATTERN,
  19317. TEMPLATE_LITERAL_EXPRESSION = $__3.TEMPLATE_LITERAL_EXPRESSION,
  19318. YIELD_EXPRESSION = $__3.YIELD_EXPRESSION;
  19319. function wrap(tree) {
  19320. return new ParenExpression(tree.location, tree);
  19321. }
  19322. function ParenTrait(ParseTreeTransformerClass) {
  19323. return function($__super) {
  19324. function $__0() {
  19325. $traceurRuntime.superConstructor($__0).apply(this, arguments);
  19326. }
  19327. return ($traceurRuntime.createClass)($__0, {
  19328. transformVariableDeclaration: function(tree) {
  19329. var lvalue = this.transformAny(tree.lvalue);
  19330. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19331. var initializer = this.transformAny(tree.initializer);
  19332. if (initializer !== null && initializer.type === COMMA_EXPRESSION) {
  19333. initializer = wrap(initializer);
  19334. } else if (tree.lvalue === lvalue && tree.typeAnnotation === typeAnnotation && tree.initializer === initializer) {
  19335. return tree;
  19336. }
  19337. return new VariableDeclaration(tree.location, lvalue, typeAnnotation, initializer);
  19338. },
  19339. transformExpressionStatement: function(tree) {
  19340. var expression = this.transformAny(tree.expression);
  19341. switch (expression.type) {
  19342. case OBJECT_LITERAL:
  19343. case OBJECT_PATTERN:
  19344. case FUNCTION_EXPRESSION:
  19345. expression = wrap(expression);
  19346. break;
  19347. }
  19348. if (tree.expression === expression) {
  19349. return tree;
  19350. }
  19351. return new ExpressionStatement(tree.location, expression);
  19352. },
  19353. transformNewExpression: function(tree) {
  19354. var operand = this.transformAny(tree.operand);
  19355. var args = this.transformAny(tree.args);
  19356. switch (operand.type) {
  19357. case CALL_EXPRESSION:
  19358. case TEMPLATE_LITERAL_EXPRESSION:
  19359. operand = wrap(operand);
  19360. }
  19361. if (operand === tree.operand && args === tree.args) {
  19362. return tree;
  19363. }
  19364. return new NewExpression(tree.location, operand, args);
  19365. },
  19366. transformExpressionList_: function(list) {
  19367. var expressions = this.transformList(list);
  19368. var newList = null;
  19369. for (var i = 0; i < list.length; i++) {
  19370. var expression = expressions[i];
  19371. if (expression !== null && expression.type === COMMA_EXPRESSION) {
  19372. expression = wrap(expression);
  19373. if (newList === null) {
  19374. newList = expressions.slice(0, i);
  19375. }
  19376. newList.push(expression);
  19377. } else if (newList !== null) {
  19378. newList.push(expression);
  19379. }
  19380. }
  19381. if (newList !== null) {
  19382. return newList;
  19383. }
  19384. return expressions;
  19385. },
  19386. transformArgumentList: function(tree) {
  19387. var args = this.transformExpressionList_(tree.args);
  19388. if (tree.args === args) {
  19389. return tree;
  19390. }
  19391. return new ArgumentList(tree.location, args);
  19392. },
  19393. transformArrayLiteral: function(tree) {
  19394. var elements = this.transformExpressionList_(tree.elements);
  19395. if (tree.elements === elements) {
  19396. return tree;
  19397. }
  19398. return new ArrayLiteral(tree.location, elements);
  19399. },
  19400. transformPropertyNameAssignment: function(tree) {
  19401. var name = this.transformAny(tree.name);
  19402. var value = this.transformAny(tree.value);
  19403. if (value.type === COMMA_EXPRESSION) {
  19404. value = wrap(value);
  19405. } else if (name === tree.name && value === tree.value) {
  19406. return tree;
  19407. }
  19408. return new PropertyNameAssignment(tree.location, name, value);
  19409. },
  19410. transformBinaryExpression: function(tree) {
  19411. var left = this.transformAny(tree.left);
  19412. var right = this.transformAny(tree.right);
  19413. if (commaOrYield(left.type)) {
  19414. left = wrap(left);
  19415. }
  19416. if (commaOrYield(right.type)) {
  19417. right = wrap(right);
  19418. }
  19419. if (left === tree.left && right === tree.right) {
  19420. return tree;
  19421. }
  19422. return new BinaryExpression(tree.location, left, tree.operator, right);
  19423. },
  19424. transformConditionalExpression: function(tree) {
  19425. var condition = this.transformAny(tree.condition);
  19426. var left = this.transformAny(tree.left);
  19427. var right = this.transformAny(tree.right);
  19428. if (commaOrYield(condition.type)) {
  19429. condition = wrap(condition);
  19430. }
  19431. if (left.type == COMMA_EXPRESSION) {
  19432. left = wrap(left);
  19433. }
  19434. if (right.type == COMMA_EXPRESSION) {
  19435. right = wrap(right);
  19436. }
  19437. if (condition === tree.condition && left === tree.left && right === tree.right) {
  19438. return tree;
  19439. }
  19440. return new ConditionalExpression(tree.location, condition, left, right);
  19441. }
  19442. }, {}, $__super);
  19443. }(ParseTreeTransformerClass);
  19444. }
  19445. function commaOrYield(type) {
  19446. return type === COMMA_EXPRESSION || type == YIELD_EXPRESSION;
  19447. }
  19448. return {get ParenTrait() {
  19449. return ParenTrait;
  19450. }};
  19451. });
  19452. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js", [], function() {
  19453. "use strict";
  19454. var __moduleName = "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js";
  19455. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")),
  19456. ARGUMENTS = $__1.ARGUMENTS,
  19457. CONSTRUCTOR = $__1.CONSTRUCTOR,
  19458. THIS = $__1.THIS;
  19459. var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).AlphaRenamer;
  19460. var FunctionExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).FunctionExpression;
  19461. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).TempVarTransformer;
  19462. var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).ParenTrait;
  19463. var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).default;
  19464. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")),
  19465. FUNCTION_BODY = $__7.FUNCTION_BODY,
  19466. LITERAL_PROPERTY_NAME = $__7.LITERAL_PROPERTY_NAME;
  19467. var FindThisOrArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindThisOrArguments.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).FindThisOrArguments;
  19468. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")),
  19469. createAssignmentExpression = $__9.createAssignmentExpression,
  19470. createCommaExpression = $__9.createCommaExpression,
  19471. createFunctionBody = $__9.createFunctionBody,
  19472. createIdentifierExpression = $__9.createIdentifierExpression,
  19473. createReturnStatement = $__9.createReturnStatement,
  19474. createThisExpression = $__9.createThisExpression;
  19475. function convertConciseBody(tree) {
  19476. if (tree.type !== FUNCTION_BODY)
  19477. return createFunctionBody([createReturnStatement(tree)]);
  19478. return tree;
  19479. }
  19480. var ArrowFunctionTransformer = function($__super) {
  19481. function ArrowFunctionTransformer(identifierGenerator, reporter, options) {
  19482. $traceurRuntime.superConstructor(ArrowFunctionTransformer).call(this, identifierGenerator, reporter, options);
  19483. this.inDerivedClass_ = false;
  19484. this.inConstructor_ = false;
  19485. }
  19486. return ($traceurRuntime.createClass)(ArrowFunctionTransformer, {
  19487. transformArrowFunction: function(tree) {
  19488. if (this.inDerivedClass_ && this.inConstructor_) {
  19489. return this.transformUsingCommaExpression_(tree);
  19490. }
  19491. return this.transformUsingTempVar_(tree);
  19492. },
  19493. transformUsingCommaExpression_: function(tree) {
  19494. var finder = new FindThisOrArguments();
  19495. var argumentsTempName,
  19496. thisTempName;
  19497. finder.visitAny(tree);
  19498. if (finder.foundArguments) {
  19499. argumentsTempName = this.addTempVar();
  19500. tree = AlphaRenamer.rename(tree, ARGUMENTS, argumentsTempName);
  19501. }
  19502. if (finder.foundThis) {
  19503. thisTempName = this.addTempVar();
  19504. tree = AlphaRenamer.rename(tree, THIS, thisTempName);
  19505. }
  19506. var parameterList = this.transformAny(tree.parameterList);
  19507. var body = this.transformAny(tree.body);
  19508. body = convertConciseBody(body);
  19509. var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, parameterList, null, [], body);
  19510. var expressions = [];
  19511. if (argumentsTempName) {
  19512. expressions.push(createAssignmentExpression(createIdentifierExpression(argumentsTempName), createIdentifierExpression(ARGUMENTS)));
  19513. }
  19514. if (thisTempName) {
  19515. expressions.push(createAssignmentExpression(createIdentifierExpression(thisTempName), createThisExpression()));
  19516. }
  19517. if (expressions.length === 0) {
  19518. return functionExpression;
  19519. }
  19520. expressions.push(functionExpression);
  19521. return createCommaExpression(expressions);
  19522. },
  19523. transformUsingTempVar_: function(tree) {
  19524. var alphaRenamed = alphaRenameThisAndArguments(this, tree);
  19525. var parameterList = this.transformAny(alphaRenamed.parameterList);
  19526. var body = this.transformAny(alphaRenamed.body);
  19527. body = convertConciseBody(body);
  19528. var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, parameterList, null, [], body);
  19529. return functionExpression;
  19530. },
  19531. transformClassExpression: function(tree) {
  19532. var inDerivedClass = this.inDerivedClass_;
  19533. this.inDerivedClass_ = tree.superClass !== null;
  19534. var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformClassExpression").call(this, tree);
  19535. this.inDerivedClass_ = inDerivedClass;
  19536. return result;
  19537. },
  19538. transformClassDeclaration: function(tree) {
  19539. var inDerivedClass = this.inDerivedClass_;
  19540. this.inDerivedClass_ = tree.superClass !== null;
  19541. var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformClassDeclaration").call(this, tree);
  19542. this.inDerivedClass_ = inDerivedClass;
  19543. return result;
  19544. },
  19545. transformMethod: function(tree) {
  19546. var inConstructor = this.inConstructor_;
  19547. this.inConstructor_ = !tree.isStatic && tree.functionKind === null && tree.name.type === LITERAL_PROPERTY_NAME && tree.name.literalToken.value === CONSTRUCTOR;
  19548. var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformMethod").call(this, tree);
  19549. this.inConstructor_ = inConstructor;
  19550. return result;
  19551. }
  19552. }, {transform: function(tempVarTransformer, tree) {
  19553. tree = alphaRenameThisAndArguments(tempVarTransformer, tree);
  19554. var body = convertConciseBody(tree.body);
  19555. return new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, null, [], body);
  19556. }}, $__super);
  19557. }(ParenTrait(TempVarTransformer));
  19558. return {get ArrowFunctionTransformer() {
  19559. return ArrowFunctionTransformer;
  19560. }};
  19561. });
  19562. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js", [], function() {
  19563. "use strict";
  19564. var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js";
  19565. var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default;
  19566. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")),
  19567. createArgumentList = $__2.createArgumentList,
  19568. createBlock = $__2.createBlock,
  19569. createFunctionBody = $__2.createFunctionBody,
  19570. id = $__2.createIdentifierExpression,
  19571. createMemberExpression = $__2.createMemberExpression,
  19572. createThisExpression = $__2.createThisExpression,
  19573. createVariableDeclaration = $__2.createVariableDeclaration,
  19574. createVariableDeclarationList = $__2.createVariableDeclarationList,
  19575. createVariableStatement = $__2.createVariableStatement;
  19576. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).parseStatement;
  19577. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default;
  19578. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).TempVarTransformer;
  19579. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")),
  19580. AwaitExpression = $__6.AwaitExpression,
  19581. Block = $__6.Block,
  19582. CallExpression = $__6.CallExpression,
  19583. Catch = $__6.Catch;
  19584. var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default;
  19585. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).ARGUMENTS;
  19586. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).VAR;
  19587. var AsyncGeneratorTransformer = function($__super) {
  19588. function AsyncGeneratorTransformer(identifierGenerator, reporter, options) {
  19589. $traceurRuntime.superConstructor(AsyncGeneratorTransformer).call(this, identifierGenerator, reporter, options);
  19590. this.variableDeclarations_ = [];
  19591. this.ctx_ = id(this.getTempIdentifier());
  19592. }
  19593. return ($traceurRuntime.createClass)(AsyncGeneratorTransformer, {
  19594. transformYieldExpression: function(tree) {
  19595. var argList = createArgumentList([tree.expression]);
  19596. if (tree.isYieldFor) {
  19597. return new AwaitExpression(tree.location, new CallExpression(null, createMemberExpression(this.ctx_, 'yieldFor'), argList));
  19598. }
  19599. return new CallExpression(tree.location, createMemberExpression(this.ctx_, 'yield'), argList);
  19600. },
  19601. transformCatch: function(tree) {
  19602. var body = tree.catchBody;
  19603. body = new Block(body.location, $traceurRuntime.spread([parseStatement($traceurRuntime.getTemplateObject(["\n if (", ".inReturn) {\n throw undefined;\n }"]), this.ctx_)], body.statements));
  19604. return new Catch(tree.location, tree.binding, body);
  19605. },
  19606. transformAsyncGeneratorBody_: function(tree, name) {
  19607. tree = this.transformAny(tree);
  19608. tree = alphaRenameThisAndArguments(this, tree);
  19609. var statements = [];
  19610. if (this.variableDeclarations_.length > 0) {
  19611. statements.push(createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)));
  19612. }
  19613. var body = createBlock(tree.statements);
  19614. var createAsyncGeneratorInstance = this.getRuntimeExpression('createAsyncGeneratorInstance');
  19615. statements.push(parseStatement($traceurRuntime.getTemplateObject(["\n return ", "(\n async function (", ") {\n ", "\n }, ", ");"]), createAsyncGeneratorInstance, this.ctx_, body, name));
  19616. return createFunctionBody(statements);
  19617. },
  19618. addTempVarForArguments: function() {
  19619. var tmpVarName = this.getTempIdentifier();
  19620. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, id(ARGUMENTS)));
  19621. return tmpVarName;
  19622. },
  19623. addTempVarForThis: function() {
  19624. var tmpVarName = this.getTempIdentifier();
  19625. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression()));
  19626. return tmpVarName;
  19627. }
  19628. }, {transformAsyncGeneratorBody: function(identifierGenerator, reporter, options, body, name) {
  19629. return new AsyncGeneratorTransformer(identifierGenerator, reporter, options).transformAsyncGeneratorBody_(body, name);
  19630. }}, $__super);
  19631. }(SkipFunctionsTransformerTrait(ImportRuntimeTrait(TempVarTransformer)));
  19632. return {get AsyncGeneratorTransformer() {
  19633. return AsyncGeneratorTransformer;
  19634. }};
  19635. });
  19636. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js", [], function() {
  19637. "use strict";
  19638. var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js";
  19639. var AsyncGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).AsyncGeneratorTransformer;
  19640. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).TempVarTransformer;
  19641. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")),
  19642. AnonBlock = $__3.AnonBlock,
  19643. FunctionDeclaration = $__3.FunctionDeclaration,
  19644. FunctionExpression = $__3.FunctionExpression;
  19645. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).default;
  19646. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")),
  19647. createBindingIdentifier = $__5.createBindingIdentifier,
  19648. id = $__5.createIdentifierExpression,
  19649. createIdentifierToken = $__5.createIdentifierToken;
  19650. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")),
  19651. parseExpression = $__6.parseExpression,
  19652. parseStatement = $__6.parseStatement;
  19653. var AsyncGeneratorTransformPass = function($__super) {
  19654. function AsyncGeneratorTransformPass(identifierGenerator, reporter, options) {
  19655. $traceurRuntime.superConstructor(AsyncGeneratorTransformPass).call(this, identifierGenerator, reporter, options);
  19656. this.transformOptions_ = options.transformOptions;
  19657. this.inBlock_ = false;
  19658. }
  19659. return ($traceurRuntime.createClass)(AsyncGeneratorTransformPass, {
  19660. needsTransform_: function(tree) {
  19661. return this.transformOptions_.asyncGenerators && tree.isAsyncGenerator();
  19662. },
  19663. transformFunctionDeclaration: function(tree) {
  19664. if (!this.needsTransform_(tree))
  19665. return $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformFunctionDeclaration").call(this, tree);
  19666. var nameIdExpression = id(tree.name.identifierToken);
  19667. var initAsyncGeneratorFunction = this.getRuntimeExpression('initAsyncGeneratorFunction');
  19668. var setupPrototypeExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initAsyncGeneratorFunction, nameIdExpression);
  19669. var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupPrototypeExpression));
  19670. var funcDecl = this.transformFunction_(tree, FunctionDeclaration, tmpVar);
  19671. if (!this.inBlock_)
  19672. return funcDecl;
  19673. return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ""]), tmpVar, setupPrototypeExpression)]);
  19674. },
  19675. transformFunctionExpression: function(tree) {
  19676. if (!this.needsTransform_(tree)) {
  19677. return $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformFunctionExpression").call(this, tree);
  19678. }
  19679. var name;
  19680. if (!tree.name) {
  19681. name = createIdentifierToken(this.getTempIdentifier());
  19682. tree = new FunctionExpression(tree.location, createBindingIdentifier(name), tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  19683. } else {
  19684. name = tree.name.identifierToken;
  19685. }
  19686. var functionExpression = this.transformFunction_(tree, FunctionExpression, id(name));
  19687. var initAsyncGeneratorFunction = this.getRuntimeExpression('initAsyncGeneratorFunction');
  19688. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initAsyncGeneratorFunction, functionExpression);
  19689. },
  19690. transformFunction_: function(tree, constructor, nameExpression) {
  19691. var body = $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformAny").call(this, tree.body);
  19692. body = AsyncGeneratorTransformer.transformAsyncGeneratorBody(this.identifierGenerator, this.reporter, this.options, body, nameExpression);
  19693. var functionKind = null;
  19694. return new constructor(tree.location, tree.name, functionKind, tree.parameterList, tree.typeAnnotation || null, tree.annotations || null, body);
  19695. },
  19696. transformBlock: function(tree) {
  19697. var inBlock = this.inBlock_;
  19698. this.inBlock_ = true;
  19699. var rv = $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformBlock").call(this, tree);
  19700. this.inBlock_ = inBlock;
  19701. return rv;
  19702. }
  19703. }, {}, $__super);
  19704. }(ImportRuntimeTrait(TempVarTransformer));
  19705. return {get AsyncGeneratorTransformPass() {
  19706. return AsyncGeneratorTransformPass;
  19707. }};
  19708. });
  19709. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindArguments.js", [], function() {
  19710. "use strict";
  19711. var __moduleName = "traceur@0.0.112/src/codegeneration/FindArguments.js";
  19712. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FindArguments.js")).ARGUMENTS;
  19713. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/FindArguments.js")).FindInFunctionScope;
  19714. var FindArguments = function($__super) {
  19715. function FindArguments() {
  19716. $traceurRuntime.superConstructor(FindArguments).apply(this, arguments);
  19717. }
  19718. return ($traceurRuntime.createClass)(FindArguments, {visitIdentifierExpression: function(tree) {
  19719. if (tree.identifierToken.value === ARGUMENTS) {
  19720. this.found = true;
  19721. }
  19722. }}, {}, $__super);
  19723. }(FindInFunctionScope);
  19724. return {get default() {
  19725. return FindArguments;
  19726. }};
  19727. });
  19728. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js", [], function() {
  19729. "use strict";
  19730. var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js";
  19731. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).ARGUMENTS;
  19732. var FindArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindArguments.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).default;
  19733. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")),
  19734. FunctionBody = $__3.FunctionBody,
  19735. FunctionDeclaration = $__3.FunctionDeclaration,
  19736. FunctionExpression = $__3.FunctionExpression,
  19737. Method = $__3.Method,
  19738. YieldExpression = $__3.YieldExpression;
  19739. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).default;
  19740. var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).ParenTrait;
  19741. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).parseStatement;
  19742. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).TempVarTransformer;
  19743. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")),
  19744. createIdentifierExpression = $__8.createIdentifierExpression,
  19745. createNullLiteral = $__8.createNullLiteral;
  19746. var AsyncToGeneratorTransformer = function($__super) {
  19747. function AsyncToGeneratorTransformer(identifierGenerator, reporter, options) {
  19748. $traceurRuntime.superConstructor(AsyncToGeneratorTransformer).call(this, identifierGenerator, reporter, options);
  19749. this.inAsyncFunction_ = false;
  19750. }
  19751. return ($traceurRuntime.createClass)(AsyncToGeneratorTransformer, {
  19752. transformFunctionDeclaration: function(tree) {
  19753. if (tree.isAsyncFunction()) {
  19754. return this.transformFunctionShared_(tree, FunctionDeclaration);
  19755. }
  19756. return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  19757. },
  19758. transformFunctionExpression: function(tree) {
  19759. if (tree.isAsyncFunction()) {
  19760. return this.transformFunctionShared_(tree, FunctionExpression);
  19761. }
  19762. return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformFunctionExpression").call(this, tree);
  19763. },
  19764. transformFunctionShared_: function(tree, ctor) {
  19765. var parameterList = this.transformAny(tree.parameterList);
  19766. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19767. var annotations = this.transformList(tree.annotations);
  19768. var body = this.transformAsyncBody_(tree.body);
  19769. return new ctor(tree.location, tree.name, null, parameterList, typeAnnotation, annotations, body);
  19770. },
  19771. transformAsyncBody_: function(body) {
  19772. var inAsyncFunction = this.inAsyncFunction_;
  19773. this.inAsyncFunction_ = true;
  19774. body = this.transformFunctionBody(body);
  19775. var spawn = this.getRuntimeExpression('spawn');
  19776. body = wrapBodyInSpawn(body, spawn);
  19777. this.inAsyncFunction_ = inAsyncFunction;
  19778. return body;
  19779. },
  19780. transformMethod: function(tree) {
  19781. if (tree.isAsyncFunction()) {
  19782. var name = this.transformAny(tree.name);
  19783. var parameterList = this.transformAny(tree.parameterList);
  19784. var typeAnnotation = this.transformAny(tree.typeAnnotation);
  19785. var annotations = this.transformList(tree.annotations);
  19786. var body = this.transformAsyncBody_(tree.body);
  19787. return new Method(tree.location, tree.isStatic, null, name, parameterList, typeAnnotation, annotations, body, tree.debugName);
  19788. }
  19789. return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformMethod").call(this, tree);
  19790. },
  19791. transformAwaitExpression: function(tree) {
  19792. if (this.inAsyncFunction_) {
  19793. var expression = this.transformAny(tree.expression);
  19794. return new YieldExpression(tree.location, expression, false);
  19795. }
  19796. return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformAwaitExpression").call(this, tree);
  19797. }
  19798. }, {}, $__super);
  19799. }(ImportRuntimeTrait(ParenTrait(TempVarTransformer)));
  19800. function wrapBodyInSpawn(body, spawn) {
  19801. var visitor = new FindArguments();
  19802. visitor.visitAny(body);
  19803. var argExpr = visitor.found ? createIdentifierExpression(ARGUMENTS) : createNullLiteral();
  19804. var statement = parseStatement($traceurRuntime.getTemplateObject(["return ", "(this, ", ", function*() { ", " });"]), spawn, argExpr, body);
  19805. return new FunctionBody(body.location, [statement]);
  19806. }
  19807. return {get AsyncToGeneratorTransformer() {
  19808. return AsyncToGeneratorTransformer;
  19809. }};
  19810. });
  19811. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindIdentifiers.js", [], function() {
  19812. "use strict";
  19813. var __moduleName = "traceur@0.0.112/src/codegeneration/FindIdentifiers.js";
  19814. var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ScopeVisitor.js", "traceur@0.0.112/src/codegeneration/FindIdentifiers.js")).ScopeVisitor;
  19815. var FindIdentifiers = function($__super) {
  19816. function FindIdentifiers(tree, filterFunction) {
  19817. $traceurRuntime.superConstructor(FindIdentifiers).call(this);
  19818. this.filterFunction_ = filterFunction;
  19819. this.found_ = false;
  19820. this.visitAny(tree);
  19821. }
  19822. return ($traceurRuntime.createClass)(FindIdentifiers, {
  19823. visitIdentifierExpression: function(tree) {
  19824. if (this.filterFunction_(tree.identifierToken.value, this.scope.tree)) {
  19825. this.found = true;
  19826. }
  19827. },
  19828. get found() {
  19829. return this.found_;
  19830. },
  19831. set found(v) {
  19832. if (v) {
  19833. this.found_ = true;
  19834. }
  19835. },
  19836. visitAny: function(tree) {
  19837. !this.found_ && tree && tree.visit(this);
  19838. },
  19839. visitList: function(list) {
  19840. if (list) {
  19841. for (var i = 0; !this.found_ && i < list.length; i++) {
  19842. this.visitAny(list[i]);
  19843. }
  19844. }
  19845. }
  19846. }, {}, $__super);
  19847. }(ScopeVisitor);
  19848. return {get FindIdentifiers() {
  19849. return FindIdentifiers;
  19850. }};
  19851. });
  19852. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js", [], function() {
  19853. "use strict";
  19854. var __moduleName = "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js";
  19855. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).ParseTreeTransformer;
  19856. var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).default;
  19857. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).parseStatement;
  19858. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")),
  19859. AnonBlock = $__6.AnonBlock,
  19860. BreakStatement = $__6.BreakStatement,
  19861. ContinueStatement = $__6.ContinueStatement,
  19862. FormalParameterList = $__6.FormalParameterList,
  19863. FunctionExpression = $__6.FunctionExpression,
  19864. ReturnStatement = $__6.ReturnStatement,
  19865. YieldExpression = $__6.YieldExpression;
  19866. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")),
  19867. createArgumentList = $__7.createArgumentList,
  19868. createAssignmentStatement = $__7.createAssignmentStatement,
  19869. createAssignmentExpression = $__7.createAssignmentExpression,
  19870. createBlock = $__7.createBlock,
  19871. createCallExpression = $__7.createCallExpression,
  19872. createCaseClause = $__7.createCaseClause,
  19873. createDefaultClause = $__7.createDefaultClause,
  19874. createExpressionStatement = $__7.createExpressionStatement,
  19875. createFunctionBody = $__7.createFunctionBody,
  19876. createFunctionExpression = $__7.createFunctionExpression,
  19877. createIdentifierExpression = $__7.createIdentifierExpression,
  19878. createNumberLiteral = $__7.createNumberLiteral,
  19879. createObjectLiteralForDescriptor = $__7.createObjectLiteralForDescriptor,
  19880. createSwitchStatement = $__7.createSwitchStatement,
  19881. createThisExpression = $__7.createThisExpression,
  19882. createVariableDeclaration = $__7.createVariableDeclaration,
  19883. createVariableDeclarationList = $__7.createVariableDeclarationList,
  19884. createVariableStatement = $__7.createVariableStatement,
  19885. createVoid0 = $__7.createVoid0;
  19886. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).ARGUMENTS;
  19887. var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).default;
  19888. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).StringSet;
  19889. var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).Token;
  19890. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")),
  19891. STAR = $__12.STAR,
  19892. VAR = $__12.VAR;
  19893. var FnExtractAbruptCompletions = function($__super) {
  19894. function FnExtractAbruptCompletions(idGenerator, requestParentLabel) {
  19895. $traceurRuntime.superConstructor(FnExtractAbruptCompletions).call(this);
  19896. this.idGenerator_ = idGenerator;
  19897. this.inLoop_ = 0;
  19898. this.inBreakble_ = 0;
  19899. this.variableDeclarations_ = [];
  19900. this.extractedStatements_ = [];
  19901. this.requestParentLabel_ = requestParentLabel;
  19902. this.labelledStatements_ = new StringSet();
  19903. }
  19904. return ($traceurRuntime.createClass)(FnExtractAbruptCompletions, {
  19905. createIIFE: function(body, paramList, argsList, inGenerator) {
  19906. body = this.transformAny(body);
  19907. body = alphaRenameThisAndArguments(this, body);
  19908. var tmpFnName = this.idGenerator_.generateUniqueIdentifier();
  19909. var functionKind = inGenerator ? new Token(STAR, null) : null;
  19910. var functionExpression = new FunctionExpression(null, null, functionKind, new FormalParameterList(null, paramList), null, [], createFunctionBody(body.statements || [body]));
  19911. this.variableDeclarations_.push(createVariableDeclaration(tmpFnName, functionExpression));
  19912. var functionCall = createCallExpression(createIdentifierExpression(tmpFnName), createArgumentList(argsList));
  19913. if (inGenerator) {
  19914. functionCall = new YieldExpression(null, functionCall, true);
  19915. }
  19916. var loopBody = null;
  19917. if (this.extractedStatements_.length || this.hasReturns) {
  19918. var tmpVarName = createIdentifierExpression(this.idGenerator_.generateUniqueIdentifier());
  19919. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, null));
  19920. var maybeReturn;
  19921. if (this.hasReturns) {
  19922. maybeReturn = parseStatement($traceurRuntime.getTemplateObject(["if (typeof ", " === \"object\")\n return ", ".v;"]), tmpVarName, tmpVarName);
  19923. }
  19924. if (this.extractedStatements_.length) {
  19925. var caseClauses = this.extractedStatements_.map(function(statement, index) {
  19926. return createCaseClause(createNumberLiteral(index), [statement]);
  19927. });
  19928. if (maybeReturn) {
  19929. caseClauses.push(createDefaultClause([maybeReturn]));
  19930. }
  19931. loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), createSwitchStatement(tmpVarName, caseClauses)]);
  19932. } else {
  19933. loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), maybeReturn]);
  19934. }
  19935. } else {
  19936. loopBody = createBlock([createExpressionStatement(functionCall)]);
  19937. }
  19938. return {
  19939. variableStatements: createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)),
  19940. loopBody: loopBody
  19941. };
  19942. },
  19943. addTempVarForArguments: function() {
  19944. var tmpVarName = this.idGenerator_.generateUniqueIdentifier();
  19945. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createIdentifierExpression(ARGUMENTS)));
  19946. return tmpVarName;
  19947. },
  19948. addTempVarForThis: function() {
  19949. var tmpVarName = this.idGenerator_.generateUniqueIdentifier();
  19950. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression()));
  19951. return tmpVarName;
  19952. },
  19953. transformAny: function(tree) {
  19954. if (tree) {
  19955. if (tree.isBreakableStatement())
  19956. this.inBreakble_++;
  19957. if (tree.isIterationStatement())
  19958. this.inLoop_++;
  19959. tree = $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformAny").call(this, tree);
  19960. if (tree.isBreakableStatement())
  19961. this.inBreakble_--;
  19962. if (tree.isIterationStatement())
  19963. this.inLoop_--;
  19964. }
  19965. return tree;
  19966. },
  19967. transformReturnStatement: function(tree) {
  19968. this.hasReturns = true;
  19969. return new ReturnStatement(tree.location, createObjectLiteralForDescriptor({v: tree.expression || createVoid0()}));
  19970. },
  19971. transformAbruptCompletion_: function(tree) {
  19972. this.extractedStatements_.push(tree);
  19973. var index = this.extractedStatements_.length - 1;
  19974. return parseStatement($traceurRuntime.getTemplateObject(["return ", ";"]), index);
  19975. },
  19976. transformBreakStatement: function(tree) {
  19977. if (!tree.name) {
  19978. if (this.inBreakble_) {
  19979. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformBreakStatement").call(this, tree);
  19980. } else {
  19981. tree = new BreakStatement(tree.location, this.requestParentLabel_());
  19982. }
  19983. } else if (this.labelledStatements_.has(tree.name.value)) {
  19984. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformBreakStatement").call(this, tree);
  19985. }
  19986. return this.transformAbruptCompletion_(tree);
  19987. },
  19988. transformContinueStatement: function(tree) {
  19989. if (!tree.name) {
  19990. if (this.inLoop_) {
  19991. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformContinueStatement").call(this, tree);
  19992. } else {
  19993. tree = new ContinueStatement(tree.location, this.requestParentLabel_());
  19994. }
  19995. } else if (this.labelledStatements_.has(tree.name.value)) {
  19996. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformContinueStatement").call(this, tree);
  19997. }
  19998. return this.transformAbruptCompletion_(tree);
  19999. },
  20000. transformLabelledStatement: function(tree) {
  20001. this.labelledStatements_.add(tree.name.value);
  20002. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformLabelledStatement").call(this, tree);
  20003. },
  20004. transformVariableStatement: function(tree) {
  20005. var $__2 = this;
  20006. if (tree.declarations.declarationType === VAR) {
  20007. var assignments = [];
  20008. tree.declarations.declarations.forEach(function(variableDeclaration) {
  20009. var variableName = variableDeclaration.lvalue.getStringValue();
  20010. var initializer = $traceurRuntime.superGet($__2, FnExtractAbruptCompletions.prototype, "transformAny").call($__2, variableDeclaration.initializer);
  20011. $__2.variableDeclarations_.push(createVariableDeclaration(variableName, null));
  20012. assignments.push(createAssignmentStatement(createIdentifierExpression(variableName), initializer));
  20013. });
  20014. return new AnonBlock(null, assignments);
  20015. }
  20016. return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformVariableStatement").call(this, tree);
  20017. }
  20018. }, {createIIFE: function(idGenerator, body, paramList, argsList, requestParentLabel, inGenerator) {
  20019. return new FnExtractAbruptCompletions(idGenerator, requestParentLabel).createIIFE(body, paramList, argsList, inGenerator);
  20020. }}, $__super);
  20021. }(SkipFunctionsTransformerTrait(ParseTreeTransformer));
  20022. return {get FnExtractAbruptCompletions() {
  20023. return FnExtractAbruptCompletions;
  20024. }};
  20025. });
  20026. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeReferences.js", [], function() {
  20027. "use strict";
  20028. var __moduleName = "traceur@0.0.112/src/semantics/ScopeReferences.js";
  20029. var Scope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scope.js", "traceur@0.0.112/src/semantics/ScopeReferences.js")).Scope;
  20030. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/semantics/ScopeReferences.js")).StringSet;
  20031. var ScopeReferences = function($__super) {
  20032. function ScopeReferences(parent, tree) {
  20033. $traceurRuntime.superConstructor(ScopeReferences).call(this, parent, tree);
  20034. this.freeVars_ = new StringSet();
  20035. }
  20036. return ($traceurRuntime.createClass)(ScopeReferences, {
  20037. addReference: function(name) {
  20038. this.freeVars_.add(name);
  20039. },
  20040. hasFreeVariable: function(name) {
  20041. return this.freeVars_.has(name);
  20042. }
  20043. }, {}, $__super);
  20044. }(Scope);
  20045. return {get ScopeReferences() {
  20046. return ScopeReferences;
  20047. }};
  20048. });
  20049. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js", [], function() {
  20050. "use strict";
  20051. var __moduleName = "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js";
  20052. var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).ScopeChainBuilder;
  20053. var ScopeReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeReferences.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).ScopeReferences;
  20054. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")),
  20055. FUNCTION_DECLARATION = $__3.FUNCTION_DECLARATION,
  20056. FUNCTION_EXPRESSION = $__3.FUNCTION_EXPRESSION,
  20057. GET_ACCESSOR = $__3.GET_ACCESSOR,
  20058. IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION,
  20059. METHOD = $__3.METHOD,
  20060. MODULE = $__3.MODULE,
  20061. SET_ACCESSOR = $__3.SET_ACCESSOR;
  20062. var TYPEOF = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).TYPEOF;
  20063. function hasArgumentsInScope(scope) {
  20064. for (; scope; scope = scope.parent) {
  20065. switch (scope.tree.type) {
  20066. case FUNCTION_DECLARATION:
  20067. case FUNCTION_EXPRESSION:
  20068. case GET_ACCESSOR:
  20069. case METHOD:
  20070. case SET_ACCESSOR:
  20071. return true;
  20072. }
  20073. }
  20074. return false;
  20075. }
  20076. function inModuleScope(scope) {
  20077. for (; scope; scope = scope.parent) {
  20078. if (scope.tree.type === MODULE) {
  20079. return true;
  20080. }
  20081. }
  20082. return false;
  20083. }
  20084. var ScopeChainBuilderWithReferences = function($__super) {
  20085. function ScopeChainBuilderWithReferences() {
  20086. $traceurRuntime.superConstructor(ScopeChainBuilderWithReferences).apply(this, arguments);
  20087. }
  20088. return ($traceurRuntime.createClass)(ScopeChainBuilderWithReferences, {
  20089. createScope: function(tree) {
  20090. return new ScopeReferences(this.scope, tree);
  20091. },
  20092. visitIdentifierExpression: function(tree) {
  20093. if (this.inWithBlock) {
  20094. return;
  20095. }
  20096. var scope = this.scope;
  20097. var name = tree.getStringValue();
  20098. if (name === 'arguments' && hasArgumentsInScope(scope)) {
  20099. return;
  20100. }
  20101. if (name === '__moduleName' && inModuleScope(scope)) {
  20102. return;
  20103. }
  20104. this.referenceFound(tree, name);
  20105. },
  20106. visitUnaryExpression: function(tree) {
  20107. if (tree.operator.type === TYPEOF && tree.operand.type === IDENTIFIER_EXPRESSION) {
  20108. var scope = this.scope;
  20109. var binding = scope.getBinding(tree.operand);
  20110. if (!binding) {
  20111. scope.addVar(tree.operand, this.reporter);
  20112. }
  20113. } else {
  20114. $traceurRuntime.superGet(this, ScopeChainBuilderWithReferences.prototype, "visitUnaryExpression").call(this, tree);
  20115. }
  20116. },
  20117. referenceFound: function(tree, name) {
  20118. this.scope.addReference(name);
  20119. }
  20120. }, {}, $__super);
  20121. }(ScopeChainBuilder);
  20122. return {get ScopeChainBuilderWithReferences() {
  20123. return ScopeChainBuilderWithReferences;
  20124. }};
  20125. });
  20126. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js", [], function() {
  20127. "use strict";
  20128. var __moduleName = "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js";
  20129. var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).AlphaRenamer;
  20130. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")),
  20131. ANON_BLOCK = $__7.ANON_BLOCK,
  20132. BINDING_IDENTIFIER = $__7.BINDING_IDENTIFIER,
  20133. FOR_IN_STATEMENT = $__7.FOR_IN_STATEMENT,
  20134. FOR_OF_STATEMENT = $__7.FOR_OF_STATEMENT,
  20135. VARIABLE_DECLARATION_LIST = $__7.VARIABLE_DECLARATION_LIST;
  20136. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")),
  20137. AnonBlock = $__8.AnonBlock,
  20138. BindingElement = $__8.BindingElement,
  20139. BindingIdentifier = $__8.BindingIdentifier,
  20140. Block = $__8.Block,
  20141. Catch = $__8.Catch,
  20142. DoWhileStatement = $__8.DoWhileStatement,
  20143. ForInStatement = $__8.ForInStatement,
  20144. ForStatement = $__8.ForStatement,
  20145. FormalParameter = $__8.FormalParameter,
  20146. FunctionBody = $__8.FunctionBody,
  20147. FunctionExpression = $__8.FunctionExpression,
  20148. LabelledStatement = $__8.LabelledStatement,
  20149. LiteralPropertyName = $__8.LiteralPropertyName,
  20150. Module = $__8.Module,
  20151. ObjectPatternField = $__8.ObjectPatternField,
  20152. Script = $__8.Script,
  20153. VariableDeclaration = $__8.VariableDeclaration,
  20154. VariableDeclarationList = $__8.VariableDeclarationList,
  20155. VariableStatement = $__8.VariableStatement,
  20156. WhileStatement = $__8.WhileStatement;
  20157. var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).IdentifierToken;
  20158. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).ParseTreeTransformer;
  20159. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).VAR;
  20160. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")),
  20161. createBindingIdentifier = $__12.createBindingIdentifier,
  20162. createIdentifierExpression = $__12.createIdentifierExpression,
  20163. createIdentifierToken = $__12.createIdentifierToken;
  20164. var FindIdentifiers = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindIdentifiers.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FindIdentifiers;
  20165. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FindVisitor;
  20166. var FnExtractAbruptCompletions = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FnExtractAbruptCompletions.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FnExtractAbruptCompletions;
  20167. var ScopeChainBuilderWithReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ScopeChainBuilderWithReferences.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).ScopeChainBuilderWithReferences;
  20168. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).parseExpression;
  20169. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).prependStatements;
  20170. function varNeedsInitializer(tree, loopTree) {
  20171. if (loopTree === null)
  20172. return false;
  20173. var type = loopTree.type;
  20174. if (type !== FOR_IN_STATEMENT && type !== FOR_OF_STATEMENT)
  20175. return true;
  20176. return loopTree.initializer.declarations[0] !== tree;
  20177. }
  20178. var BlockBindingTransformer = function($__super) {
  20179. function BlockBindingTransformer(idGenerator, reporter, tree) {
  20180. var scopeBuilder = arguments[3];
  20181. var latestScope = arguments[4];
  20182. $traceurRuntime.superConstructor(BlockBindingTransformer).call(this);
  20183. this.idGenerator_ = idGenerator;
  20184. this.reporter_ = reporter;
  20185. if (!scopeBuilder) {
  20186. scopeBuilder = new ScopeChainBuilderWithReferences(reporter);
  20187. scopeBuilder.visitAny(tree);
  20188. }
  20189. this.scopeBuilder_ = scopeBuilder;
  20190. this.labelledLoops_ = new Map();
  20191. this.prependStatement_ = [];
  20192. this.prependBlockStatement_ = [];
  20193. this.blockRenames_ = [];
  20194. this.rootTree_ = tree;
  20195. if (latestScope) {
  20196. this.scope_ = latestScope;
  20197. } else {
  20198. this.pushScope(tree);
  20199. }
  20200. this.usedVars_ = this.scope_.getAllBindingNames();
  20201. this.maybeRename_ = false;
  20202. this.inObjectPattern_ = false;
  20203. this.currentLoopTree_ = null;
  20204. }
  20205. return ($traceurRuntime.createClass)(BlockBindingTransformer, {
  20206. getVariableName_: function(variable) {
  20207. var lvalue = variable.lvalue;
  20208. if (lvalue.type === BINDING_IDENTIFIER) {
  20209. return lvalue.getStringValue();
  20210. }
  20211. throw new Error('Unexpected destructuring declaration found.');
  20212. },
  20213. flushRenames: function(tree) {
  20214. tree = renameAll(this.blockRenames_, tree);
  20215. this.blockRenames_.length = 0;
  20216. return tree;
  20217. },
  20218. pushScope: function(tree) {
  20219. var scope = this.scopeBuilder_.getScopeForTree(tree);
  20220. if (!scope)
  20221. throw new Error('BlockBindingTransformer tree with no scope');
  20222. if (this.scope_)
  20223. this.scope_.blockBindingRenames = this.blockRenames_;
  20224. this.scope_ = scope;
  20225. this.blockRenames_ = [];
  20226. return scope;
  20227. },
  20228. popScope: function(scope) {
  20229. if (this.scope_ !== scope) {
  20230. throw new Error('BlockBindingTransformer scope mismatch');
  20231. }
  20232. this.scope_ = scope.parent;
  20233. this.blockRenames_ = this.scope_ && this.scope_.blockBindingRenames || [];
  20234. },
  20235. revisitTreeForScopes: function(tree) {
  20236. this.scopeBuilder_.scope = this.scope_;
  20237. this.scopeBuilder_.visitAny(tree);
  20238. this.scopeBuilder_.scope = null;
  20239. },
  20240. needsRename_: function(name) {
  20241. if (this.usedVars_.has(name))
  20242. return true;
  20243. var scope = this.scope_;
  20244. var parent = scope.parent;
  20245. if (!parent || scope.isVarScope)
  20246. return false;
  20247. var varScope = scope.getVarScope();
  20248. if (varScope && varScope.hasFreeVariable(name)) {
  20249. return true;
  20250. }
  20251. var parentBinding = parent.getBindingByName(name);
  20252. if (!parentBinding)
  20253. return false;
  20254. var currentBinding = scope.getBindingByName(name);
  20255. if (currentBinding.tree === parentBinding.tree)
  20256. return false;
  20257. return true;
  20258. },
  20259. newNameFromOrig: function(origName, renames) {
  20260. var newName;
  20261. if (this.needsRename_(origName)) {
  20262. newName = origName + this.idGenerator_.generateUniqueIdentifier();
  20263. renames.push(new Rename(origName, newName));
  20264. } else {
  20265. this.usedVars_.add(origName);
  20266. newName = origName;
  20267. }
  20268. return newName;
  20269. },
  20270. transformFunctionBody: function(tree) {
  20271. if (tree === this.rootTree_ || !this.rootTree_) {
  20272. tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformFunctionBody").call(this, tree);
  20273. if (this.prependStatement_.length || this.blockRenames_.length) {
  20274. var statements = prependStatements.apply((void 0), $traceurRuntime.spread([tree.statements], this.prependStatement_));
  20275. tree = new FunctionBody(tree.location, statements);
  20276. tree = this.flushRenames(tree);
  20277. }
  20278. } else {
  20279. var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_, this.scope_);
  20280. var functionBodyTree = functionTransform.transformAny(tree);
  20281. if (functionBodyTree === tree) {
  20282. return tree;
  20283. }
  20284. tree = new FunctionBody(tree.location, functionBodyTree.statements);
  20285. }
  20286. return tree;
  20287. },
  20288. transformScript: function(tree) {
  20289. if (tree === this.rootTree_ || !this.rootTree_) {
  20290. tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformScript").call(this, tree);
  20291. if (this.prependStatement_.length || this.blockRenames_.length) {
  20292. var scriptItemList = prependStatements.apply((void 0), $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_));
  20293. tree = new Script(tree.location, scriptItemList, tree.moduleName);
  20294. tree = this.flushRenames(tree);
  20295. }
  20296. } else {
  20297. var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_);
  20298. var newTree = functionTransform.transformAny(tree);
  20299. if (newTree === tree) {
  20300. return tree;
  20301. }
  20302. tree = new Script(tree.location, newTree.scriptItemList, tree.moduleName);
  20303. }
  20304. return tree;
  20305. },
  20306. transformModule: function(tree) {
  20307. if (tree === this.rootTree_ || !this.rootTree_) {
  20308. tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformModule").call(this, tree);
  20309. if (this.prependStatement_.length || this.blockRenames_.length) {
  20310. var scriptItemList = prependStatements.apply((void 0), $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_));
  20311. tree = new Module(tree.location, scriptItemList, tree.moduleName);
  20312. tree = this.flushRenames(tree);
  20313. }
  20314. } else {
  20315. var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_);
  20316. var newTree = functionTransform.transformAny(tree);
  20317. if (newTree === tree) {
  20318. return tree;
  20319. }
  20320. tree = new Module(tree.location, newTree.scriptItemList, tree.moduleName);
  20321. }
  20322. return tree;
  20323. },
  20324. transformVariableStatement: function(tree) {
  20325. var declarations = this.transformAny(tree.declarations);
  20326. if (declarations.type === ANON_BLOCK) {
  20327. return declarations;
  20328. }
  20329. if (declarations === tree.declarations) {
  20330. return tree;
  20331. }
  20332. return new VariableStatement(tree.location, declarations);
  20333. },
  20334. transformVariableDeclarationList: function(tree) {
  20335. if (tree.declarationType === VAR) {
  20336. return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformVariableDeclarationList").call(this, tree);
  20337. }
  20338. this.maybeRename_ = !this.scope_.isVarScope;
  20339. var declarations = this.transformList(tree.declarations);
  20340. this.maybeRename_ = false;
  20341. return new VariableDeclarationList(tree.location, VAR, declarations);
  20342. },
  20343. transformVariableDeclaration: function(tree) {
  20344. var maybeRename = this.maybeRename_;
  20345. var lvalue = this.transformAny(tree.lvalue);
  20346. this.maybeRename_ = false;
  20347. var initializer = null;
  20348. if (tree.initializer) {
  20349. initializer = this.transformAny(tree.initializer);
  20350. } else if (varNeedsInitializer(tree, this.currentLoopTree_)) {
  20351. initializer = parseExpression($traceurRuntime.getTemplateObject(["void 0"]));
  20352. }
  20353. this.maybeRename_ = maybeRename;
  20354. if (tree.lvalue === lvalue && tree.initializer === initializer) {
  20355. return tree;
  20356. }
  20357. return new VariableDeclaration(tree.location, lvalue, tree.typeAnnotation, initializer);
  20358. },
  20359. transformBindingIdentifier: function(tree) {
  20360. if (this.maybeRename_) {
  20361. var origName = tree.getStringValue();
  20362. var newName = this.newNameFromOrig(origName, this.blockRenames_);
  20363. if (origName === newName) {
  20364. return tree;
  20365. }
  20366. var newToken = new IdentifierToken(tree.location, newName);
  20367. var bindingIdentifier = new BindingIdentifier(tree.location, newToken);
  20368. this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_);
  20369. return bindingIdentifier;
  20370. }
  20371. return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformBindingIdentifier").call(this, tree);
  20372. },
  20373. transformBindingElement: function(tree) {
  20374. var maybeRename = this.maybeRename_;
  20375. var inObjectPattern = this.inObjectPattern_;
  20376. var binding = this.transformAny(tree.binding);
  20377. this.maybeRename_ = false;
  20378. this.inObjectPattern_ = false;
  20379. var initializer = this.transformAny(tree.initializer);
  20380. this.maybeRename_ = maybeRename;
  20381. this.inObjectPattern_ = inObjectPattern;
  20382. if (tree.binding === binding && tree.initializer === initializer) {
  20383. return tree;
  20384. }
  20385. var bindingElement = new BindingElement(tree.location, binding, initializer);
  20386. if (this.inObjectPattern_ && tree.binding !== binding && tree.binding.type === BINDING_IDENTIFIER) {
  20387. return new ObjectPatternField(tree.location, new LiteralPropertyName(tree.location, tree.binding.identifierToken), bindingElement);
  20388. }
  20389. return bindingElement;
  20390. },
  20391. transformObjectPattern: function(tree) {
  20392. var inObjectPattern = this.inObjectPattern_;
  20393. this.inObjectPattern_ = true;
  20394. var transformed = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformObjectPattern").call(this, tree);
  20395. this.inObjectPattern_ = inObjectPattern;
  20396. return transformed;
  20397. },
  20398. transformObjectPatternField: function(tree) {
  20399. var name = this.transformAny(tree.name);
  20400. this.inObjectPattern_ = false;
  20401. var element = this.transformAny(tree.element);
  20402. this.inObjectPattern_ = true;
  20403. if (tree.name === name && tree.element === element) {
  20404. return tree;
  20405. }
  20406. return new ObjectPatternField(tree.location, name, element);
  20407. },
  20408. transformBlock: function(tree) {
  20409. var scope = this.pushScope(tree);
  20410. var outerPrepends = this.prependBlockStatement_;
  20411. this.prependBlockStatement_ = [];
  20412. tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformBlock").call(this, tree);
  20413. if (this.prependBlockStatement_.length) {
  20414. tree = new Block(tree.location, prependStatements.apply((void 0), $traceurRuntime.spread([tree.statements], this.prependBlockStatement_)));
  20415. }
  20416. this.prependBlockStatement_ = outerPrepends;
  20417. tree = this.flushRenames(tree);
  20418. this.popScope(scope);
  20419. return tree;
  20420. },
  20421. transformCatch: function(tree) {
  20422. var scope = this.pushScope(tree);
  20423. var binding = this.transformAny(tree.binding);
  20424. var statements = this.transformList(tree.catchBody.statements);
  20425. if (binding !== tree.binding || statements !== tree.catchBody.statements) {
  20426. tree = new Catch(tree.location, binding, new Block(tree.catchBody.location, statements));
  20427. }
  20428. tree = this.flushRenames(tree);
  20429. this.popScope(scope);
  20430. return tree;
  20431. },
  20432. transformFunctionForScope_: function(func, tree) {
  20433. var scope = this.pushScope(tree);
  20434. tree = func();
  20435. tree = this.flushRenames(tree);
  20436. this.popScope(scope);
  20437. return tree;
  20438. },
  20439. transformGetAccessor: function(tree) {
  20440. var $__3 = this;
  20441. return this.transformFunctionForScope_(function() {
  20442. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformGetAccessor").call($__3, tree);
  20443. }, tree);
  20444. },
  20445. transformSetAccessor: function(tree) {
  20446. var $__3 = this;
  20447. return this.transformFunctionForScope_(function() {
  20448. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformSetAccessor").call($__3, tree);
  20449. }, tree);
  20450. },
  20451. transformFunctionExpression: function(tree) {
  20452. var $__3 = this;
  20453. return this.transformFunctionForScope_(function() {
  20454. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformFunctionExpression").call($__3, tree);
  20455. }, tree);
  20456. },
  20457. transformFunctionDeclaration: function(tree) {
  20458. var $__3 = this;
  20459. if (!this.scope_.isVarScope) {
  20460. var origName = tree.name.getStringValue();
  20461. var newName = this.newNameFromOrig(origName, this.blockRenames_);
  20462. var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  20463. this.revisitTreeForScopes(functionExpression);
  20464. functionExpression = this.transformAny(functionExpression);
  20465. var bindingIdentifier = createBindingIdentifier(newName);
  20466. var statement = new VariableStatement(tree.location, new VariableDeclarationList(tree.location, VAR, [new VariableDeclaration(tree.location, bindingIdentifier, null, functionExpression)]));
  20467. this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_);
  20468. this.prependBlockStatement_.push(statement);
  20469. return new AnonBlock(null, []);
  20470. }
  20471. return this.transformFunctionForScope_(function() {
  20472. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformFunctionDeclaration").call($__3, tree);
  20473. }, tree);
  20474. },
  20475. transformLoop_: function(func, tree, loopFactory) {
  20476. var $__3 = this;
  20477. var scope,
  20478. initializerIsBlockBinding;
  20479. if (tree.initializer && tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) {
  20480. initializerIsBlockBinding = true;
  20481. }
  20482. if (initializerIsBlockBinding) {
  20483. scope = this.pushScope(tree);
  20484. }
  20485. var finder = new FindBlockBindingInLoop(tree, this.scopeBuilder_);
  20486. finder.visitAny(tree);
  20487. if (!finder.found) {
  20488. var callFunc = function() {
  20489. var currentLoopTree = $__3.currentLoopTree_;
  20490. $__3.currentLoopTree_ = tree;
  20491. var rv = func(tree);
  20492. $__3.currentLoopTree_ = currentLoopTree;
  20493. return rv;
  20494. };
  20495. if (!initializerIsBlockBinding) {
  20496. return callFunc();
  20497. }
  20498. var renames = [];
  20499. var initializer = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map(function(declaration) {
  20500. var origName = $__3.getVariableName_(declaration);
  20501. var newName = $__3.newNameFromOrig(origName, renames);
  20502. var bindingIdentifier = createBindingIdentifier(newName);
  20503. $__3.scope_.renameBinding(origName, bindingIdentifier, VAR, $__3.reporter_);
  20504. return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer);
  20505. }));
  20506. initializer = renameAll(renames, initializer);
  20507. tree = loopFactory(initializer, renames, renameAll(renames, tree.body));
  20508. this.revisitTreeForScopes(tree);
  20509. tree = callFunc();
  20510. } else {
  20511. var iifeParameterList = [];
  20512. var iifeArgumentList = [];
  20513. var renames$__4 = [];
  20514. var initializer$__5 = null;
  20515. if (tree.initializer) {
  20516. if (tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) {
  20517. initializer$__5 = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map(function(declaration) {
  20518. var origName = $__3.getVariableName_(declaration);
  20519. var newName = $__3.newNameFromOrig(origName, renames$__4);
  20520. iifeArgumentList.push(createIdentifierExpression(newName));
  20521. iifeParameterList.push(new FormalParameter(null, new BindingElement(null, createBindingIdentifier(origName), null), null, []));
  20522. var bindingIdentifier = createBindingIdentifier(newName);
  20523. $__3.scope_.renameBinding(origName, bindingIdentifier, VAR, $__3.reporter_);
  20524. return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer);
  20525. }));
  20526. initializer$__5 = renameAll(renames$__4, initializer$__5);
  20527. } else {
  20528. initializer$__5 = this.transformAny(tree.initializer);
  20529. }
  20530. }
  20531. var loopLabel = this.labelledLoops_.get(tree);
  20532. var iifeInfo = FnExtractAbruptCompletions.createIIFE(this.idGenerator_, tree.body, iifeParameterList, iifeArgumentList, function() {
  20533. return loopLabel = loopLabel || createIdentifierToken($__3.idGenerator_.generateUniqueIdentifier());
  20534. }, this.scope_.inGenerator);
  20535. tree = loopFactory(initializer$__5, renames$__4, iifeInfo.loopBody);
  20536. if (loopLabel) {
  20537. tree = new LabelledStatement(tree.location, loopLabel, tree);
  20538. }
  20539. tree = new AnonBlock(tree.location, [iifeInfo.variableStatements, tree]);
  20540. this.revisitTreeForScopes(tree);
  20541. tree = this.transformAny(tree);
  20542. }
  20543. if (initializerIsBlockBinding) {
  20544. tree = this.flushRenames(tree);
  20545. this.popScope(scope);
  20546. }
  20547. return tree;
  20548. },
  20549. transformForInStatement: function(tree) {
  20550. var $__3 = this;
  20551. return this.transformLoop_(function(t) {
  20552. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformForInStatement").call($__3, t);
  20553. }, tree, function(initializer, renames, body) {
  20554. return new ForInStatement(tree.location, initializer, renameAll(renames, tree.collection), body);
  20555. });
  20556. },
  20557. transformForStatement: function(tree) {
  20558. var $__3 = this;
  20559. return this.transformLoop_(function(t) {
  20560. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformForStatement").call($__3, t);
  20561. }, tree, function(initializer, renames, body) {
  20562. return new ForStatement(tree.location, initializer, renameAll(renames, tree.condition), renameAll(renames, tree.increment), body);
  20563. });
  20564. },
  20565. transformWhileStatement: function(tree) {
  20566. var $__3 = this;
  20567. return this.transformLoop_(function(t) {
  20568. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformWhileStatement").call($__3, t);
  20569. }, tree, function(initializer, renames, body) {
  20570. return new WhileStatement(tree.location, renameAll(renames, tree.condition), body);
  20571. });
  20572. },
  20573. transformDoWhileStatement: function(tree) {
  20574. var $__3 = this;
  20575. return this.transformLoop_(function(t) {
  20576. return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformDoWhileStatement").call($__3, t);
  20577. }, tree, function(initializer, renames, body) {
  20578. return new DoWhileStatement(tree.location, body, renameAll(renames, tree.condition));
  20579. });
  20580. },
  20581. transformLabelledStatement: function(tree) {
  20582. if (tree.statement.isIterationStatement()) {
  20583. this.labelledLoops_.set(tree.statement, tree.name.value);
  20584. var statement = this.transformAny(tree.statement);
  20585. if (!statement.isStatement()) {
  20586. return statement;
  20587. }
  20588. if (statement === tree.statement) {
  20589. return tree;
  20590. }
  20591. return new LabelledStatement(tree.location, tree.name, statement);
  20592. }
  20593. return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformLabelledStatement").call(this, tree);
  20594. }
  20595. }, {}, $__super);
  20596. }(ParseTreeTransformer);
  20597. var Rename = function() {
  20598. function Rename(oldName, newName) {
  20599. this.oldName = oldName;
  20600. this.newName = newName;
  20601. }
  20602. return ($traceurRuntime.createClass)(Rename, {}, {});
  20603. }();
  20604. function renameAll(renames, tree) {
  20605. renames.forEach(function(rename) {
  20606. tree = AlphaRenamer.rename(tree, rename.oldName, rename.newName);
  20607. });
  20608. return tree;
  20609. }
  20610. var FindBlockBindingInLoop = function($__super) {
  20611. function FindBlockBindingInLoop(tree, scopeBuilder) {
  20612. $traceurRuntime.superConstructor(FindBlockBindingInLoop).call(this);
  20613. this.scopeBuilder_ = scopeBuilder;
  20614. this.topScope_ = scopeBuilder.getScopeForTree(tree) || scopeBuilder.getScopeForTree(tree.body);
  20615. this.outOfScope_ = null;
  20616. this.acceptLoop_ = tree.isIterationStatement();
  20617. }
  20618. return ($traceurRuntime.createClass)(FindBlockBindingInLoop, {
  20619. visitForInStatement: function(tree) {
  20620. var $__3 = this;
  20621. this.visitLoop_(tree, function() {
  20622. return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitForInStatement").call($__3, tree);
  20623. });
  20624. },
  20625. visitForStatement: function(tree) {
  20626. var $__3 = this;
  20627. this.visitLoop_(tree, function() {
  20628. return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitForStatement").call($__3, tree);
  20629. });
  20630. },
  20631. visitWhileStatement: function(tree) {
  20632. var $__3 = this;
  20633. this.visitLoop_(tree, function() {
  20634. return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitWhileStatement").call($__3, tree);
  20635. });
  20636. },
  20637. visitDoWhileStatement: function(tree) {
  20638. var $__3 = this;
  20639. this.visitLoop_(tree, function() {
  20640. return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitDoWhileStatement").call($__3, tree);
  20641. });
  20642. },
  20643. visitLoop_: function(tree, func) {
  20644. if (this.acceptLoop_) {
  20645. this.acceptLoop_ = false;
  20646. } else if (!this.outOfScope_) {
  20647. this.outOfScope_ = this.scopeBuilder_.getScopeForTree(tree) || this.scopeBuilder_.getScopeForTree(tree.body);
  20648. }
  20649. func();
  20650. },
  20651. visitArrowFunction: function(tree) {
  20652. this.visitFunction_(tree);
  20653. },
  20654. visitFunctionDeclaration: function(tree) {
  20655. this.visitFunction_(tree);
  20656. },
  20657. visitFunctionExpression: function(tree) {
  20658. this.visitFunction_(tree);
  20659. },
  20660. visitGetAccessor: function(tree) {
  20661. this.visitFunction_(tree);
  20662. },
  20663. visitMethod: function(tree) {
  20664. this.visitFunction_(tree);
  20665. },
  20666. visitSetAccessor: function(tree) {
  20667. this.visitFunction_(tree);
  20668. },
  20669. visitFunction_: function(tree) {
  20670. var $__3 = this;
  20671. this.found = new FindIdentifiers(tree, function(identifierToken, identScope) {
  20672. identScope = $__3.scopeBuilder_.getScopeForTree(identScope);
  20673. var fnScope = $__3.outOfScope_ || $__3.scopeBuilder_.getScopeForTree(tree);
  20674. if (identScope.hasLexicalBindingName(identifierToken)) {
  20675. return false;
  20676. }
  20677. while (identScope !== fnScope && (identScope = identScope.parent)) {
  20678. if (identScope.hasLexicalBindingName(identifierToken)) {
  20679. return false;
  20680. }
  20681. }
  20682. while (fnScope = fnScope.parent) {
  20683. if (fnScope.hasLexicalBindingName(identifierToken)) {
  20684. return true;
  20685. }
  20686. if (fnScope.hasVariableBindingName(identifierToken)) {
  20687. return false;
  20688. }
  20689. if (fnScope === $__3.topScope_)
  20690. break;
  20691. }
  20692. return false;
  20693. }).found;
  20694. }
  20695. }, {}, $__super);
  20696. }(FindVisitor);
  20697. return {get BlockBindingTransformer() {
  20698. return BlockBindingTransformer;
  20699. }};
  20700. });
  20701. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js", [], function() {
  20702. "use strict";
  20703. var __moduleName = "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js";
  20704. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")),
  20705. FunctionBody = $__1.FunctionBody,
  20706. Script = $__1.Script;
  20707. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).ParseTreeTransformer;
  20708. var createUseStrictDirective = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).createUseStrictDirective;
  20709. var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).hasUseStrict;
  20710. function prepend(statements) {
  20711. return $traceurRuntime.spread([createUseStrictDirective()], statements);
  20712. }
  20713. var MakeStrictTransformer = function($__super) {
  20714. function MakeStrictTransformer() {
  20715. $traceurRuntime.superConstructor(MakeStrictTransformer).apply(this, arguments);
  20716. }
  20717. return ($traceurRuntime.createClass)(MakeStrictTransformer, {
  20718. transformScript: function(tree) {
  20719. if (hasUseStrict(tree.scriptItemList))
  20720. return tree;
  20721. return new Script(tree.location, prepend(tree.scriptItemList), tree.moduleName);
  20722. },
  20723. transformFunctionBody: function(tree) {
  20724. if (hasUseStrict(tree.statements))
  20725. return tree;
  20726. return new FunctionBody(tree.location, prepend(tree.statements));
  20727. }
  20728. }, {transformTree: function(tree) {
  20729. return new MakeStrictTransformer().transformAny(tree);
  20730. }}, $__super);
  20731. }(ParseTreeTransformer);
  20732. return {get MakeStrictTransformer() {
  20733. return MakeStrictTransformer;
  20734. }};
  20735. });
  20736. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ClassTransformer.js", [], function() {
  20737. "use strict";
  20738. var __moduleName = "traceur@0.0.112/src/codegeneration/ClassTransformer.js";
  20739. var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).CONSTRUCTOR;
  20740. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")),
  20741. AnonBlock = $__3.AnonBlock,
  20742. ClassExpression = $__3.ClassExpression,
  20743. ExportDeclaration = $__3.ExportDeclaration,
  20744. ExportSpecifier = $__3.ExportSpecifier,
  20745. ExportSpecifierSet = $__3.ExportSpecifierSet,
  20746. FunctionDeclaration = $__3.FunctionDeclaration,
  20747. FunctionExpression = $__3.FunctionExpression,
  20748. GetAccessor = $__3.GetAccessor,
  20749. Method = $__3.Method,
  20750. NamedExport = $__3.NamedExport,
  20751. SetAccessor = $__3.SetAccessor;
  20752. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")),
  20753. CLASS_DECLARATION = $__4.CLASS_DECLARATION,
  20754. COMPUTED_PROPERTY_NAME = $__4.COMPUTED_PROPERTY_NAME,
  20755. EXPORT_DEFAULT = $__4.EXPORT_DEFAULT,
  20756. GET_ACCESSOR = $__4.GET_ACCESSOR,
  20757. LITERAL_PROPERTY_NAME = $__4.LITERAL_PROPERTY_NAME,
  20758. METHOD = $__4.METHOD,
  20759. SET_ACCESSOR = $__4.SET_ACCESSOR;
  20760. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).TempVarTransformer;
  20761. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")),
  20762. CONST = $__6.CONST,
  20763. LET = $__6.LET,
  20764. VAR = $__6.VAR,
  20765. STRING = $__6.STRING;
  20766. var MakeStrictTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MakeStrictTransformer.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).MakeStrictTransformer;
  20767. var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).ParenTrait;
  20768. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).default;
  20769. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")),
  20770. createBindingIdentifier = $__10.createBindingIdentifier,
  20771. id = $__10.createIdentifierExpression,
  20772. createIdentifierToken = $__10.createIdentifierToken,
  20773. createObjectLiteral = $__10.createObjectLiteral,
  20774. createVariableStatement = $__10.createVariableStatement;
  20775. var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).hasUseStrict;
  20776. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")),
  20777. parseExpression = $__12.parseExpression,
  20778. parsePropertyDefinition = $__12.parsePropertyDefinition,
  20779. parseStatement = $__12.parseStatement;
  20780. function methodNameFromTree(tree) {
  20781. if (tree.type === COMPUTED_PROPERTY_NAME) {
  20782. return '';
  20783. }
  20784. if (tree.literalToken && tree.literalToken.type === STRING) {
  20785. return tree.getStringValue().substr(1, -1);
  20786. }
  20787. return tree.getStringValue();
  20788. }
  20789. function classMethodDebugName(className, methodName, isStatic) {
  20790. if (isStatic) {
  20791. return createBindingIdentifier('$__' + className + '_' + methodName);
  20792. }
  20793. return createBindingIdentifier('$__' + className + '_prototype_' + methodName);
  20794. }
  20795. function functionExpressionToDeclaration(tree, name) {
  20796. if (tree.name === null) {
  20797. name = createBindingIdentifier(name);
  20798. } else {
  20799. name = tree.name;
  20800. }
  20801. return new FunctionDeclaration(tree.location, name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  20802. }
  20803. function removeStaticModifier(tree) {
  20804. switch (tree.type) {
  20805. case GET_ACCESSOR:
  20806. return new GetAccessor(tree.location, false, tree.name, tree.typeAnnotation, tree.annotations, tree.body);
  20807. case SET_ACCESSOR:
  20808. return new SetAccessor(tree.location, false, tree.name, tree.parameterList, tree.annotations, tree.body);
  20809. case METHOD:
  20810. return new Method(tree.location, false, tree.functionKind, tree.name, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body, tree.debugName);
  20811. default:
  20812. throw new Error('unreachable');
  20813. }
  20814. }
  20815. function isConstructor(tree) {
  20816. if (tree.type !== METHOD || tree.isStatic || tree.functionKind !== null) {
  20817. return false;
  20818. }
  20819. var name = tree.name;
  20820. return name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === CONSTRUCTOR;
  20821. }
  20822. var ClassTransformer = function($__super) {
  20823. function ClassTransformer(identifierGenerator, reporter, options) {
  20824. $traceurRuntime.superConstructor(ClassTransformer).call(this, identifierGenerator, reporter, options);
  20825. this.strictCount_ = 0;
  20826. this.state_ = null;
  20827. }
  20828. return ($traceurRuntime.createClass)(ClassTransformer, {
  20829. transformModule: function(tree) {
  20830. this.strictCount_ = 1;
  20831. return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformModule").call(this, tree);
  20832. },
  20833. transformScript: function(tree) {
  20834. this.strictCount_ = hasUseStrict(tree.scriptItemList) ? 1 : 0;
  20835. return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformScript").call(this, tree);
  20836. },
  20837. transformFunctionBody: function(tree) {
  20838. var useStrict = hasUseStrict(tree.statements) ? 1 : 0;
  20839. this.strictCount_ += useStrict;
  20840. var result = $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformFunctionBody").call(this, tree);
  20841. this.strictCount_ -= useStrict;
  20842. return result;
  20843. },
  20844. makeStrict_: function(tree) {
  20845. if (this.strictCount_)
  20846. return tree;
  20847. return MakeStrictTransformer.transformTree(tree);
  20848. },
  20849. transformClassDeclaration: function(tree) {
  20850. var classExpression = new ClassExpression(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations, tree.typeParameters);
  20851. var transformed = this.transformClassExpression(classExpression);
  20852. var useLet = !this.options.transformOptions.blockBinding && this.options.parseOptions.blockBinding;
  20853. return createVariableStatement(useLet ? LET : VAR, tree.name, transformed);
  20854. },
  20855. transformClassExpression: function(tree) {
  20856. var superClass = this.transformAny(tree.superClass);
  20857. var elements = this.transformList(tree.elements);
  20858. var annotations = this.transformList(tree.annotations);
  20859. var constructor = null;
  20860. var protoElements = elements.filter(function(tree) {
  20861. if (tree.isStatic)
  20862. return false;
  20863. if (isConstructor(tree)) {
  20864. constructor = tree;
  20865. return false;
  20866. }
  20867. return true;
  20868. });
  20869. var staticElements = elements.filter(function(tree) {
  20870. return tree.isStatic;
  20871. }).map(removeStaticModifier);
  20872. var protoObject = createObjectLiteral(protoElements);
  20873. var staticObject = createObjectLiteral(staticElements);
  20874. if (!constructor) {
  20875. constructor = this.getDefaultConstructor_(tree);
  20876. }
  20877. var func = new FunctionExpression(tree.location, tree.name, null, constructor.parameterList, null, annotations, constructor.body);
  20878. var expression;
  20879. var createClass = this.getRuntimeExpression('createClass');
  20880. if (tree.name) {
  20881. var functionStatement;
  20882. var name = tree.name.identifierToken;
  20883. var nameId = id(("" + name));
  20884. if (!this.options.transformOptions.blockBinding && this.options.parseOptions.blockBinding) {
  20885. functionStatement = createVariableStatement(CONST, tree.name, func);
  20886. } else {
  20887. functionStatement = functionExpressionToDeclaration(func, name);
  20888. }
  20889. if (superClass) {
  20890. expression = parseExpression($traceurRuntime.getTemplateObject(["function($__super) {\n ", ";\n return (", ")(", ", ", ",\n ", ", $__super);\n }(", ")"]), functionStatement, createClass, nameId, protoObject, staticObject, superClass);
  20891. } else {
  20892. expression = parseExpression($traceurRuntime.getTemplateObject(["function() {\n ", ";\n return (", ")(", ", ", ", ", ");\n }()"]), functionStatement, createClass, nameId, protoObject, staticObject);
  20893. }
  20894. } else {
  20895. if (superClass) {
  20896. expression = parseExpression($traceurRuntime.getTemplateObject(["(", ")(", ", ", ", ", ", ", ")"]), createClass, func, protoObject, staticObject, superClass);
  20897. } else {
  20898. expression = parseExpression($traceurRuntime.getTemplateObject(["(", ")(", ", ", ", ", ")"]), createClass, func, protoObject, staticObject);
  20899. }
  20900. }
  20901. return this.makeStrict_(expression);
  20902. },
  20903. transformExportDeclaration: function(tree) {
  20904. if (tree.declaration.type === EXPORT_DEFAULT && tree.declaration.expression.type === CLASS_DECLARATION) {
  20905. return this.transformExportDefaultClass_(tree.declaration);
  20906. }
  20907. return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformExportDeclaration").call(this, tree);
  20908. },
  20909. transformExportDefaultClass_: function(tree) {
  20910. var name = tree.expression.name.identifierToken;
  20911. var specifier = new ExportSpecifier(name.location, name, createIdentifierToken('default'));
  20912. var exportTree = new ExportSpecifierSet(name.location, [specifier]);
  20913. var named = new NamedExport(name.location, exportTree, null);
  20914. var exp = new ExportDeclaration(name.location, named, []);
  20915. var classTree = this.transformAny(tree.expression);
  20916. return new AnonBlock(null, [classTree, exp]);
  20917. },
  20918. getDefaultConstructor_: function(tree) {
  20919. if (tree.superClass) {
  20920. var name = id(tree.name.identifierToken);
  20921. var superConstructor = this.getRuntimeExpression('superConstructor');
  20922. return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {\n ", "(", ").apply(this, arguments)\n }"]), superConstructor, name);
  20923. }
  20924. return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {}"]));
  20925. }
  20926. }, {}, $__super);
  20927. }(ImportRuntimeTrait(ParenTrait(TempVarTransformer)));
  20928. return {get ClassTransformer() {
  20929. return ClassTransformer;
  20930. }};
  20931. });
  20932. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js", [], function() {
  20933. "use strict";
  20934. var __moduleName = "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js";
  20935. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")).ModuleTransformer;
  20936. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")),
  20937. createIdentifierExpression = $__4.createIdentifierExpression,
  20938. createMemberExpression = $__4.createMemberExpression,
  20939. createPropertyNameAssignment = $__4.createPropertyNameAssignment;
  20940. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")),
  20941. EXPORT_DEFAULT = $__5.EXPORT_DEFAULT,
  20942. EXPORT_SPECIFIER = $__5.EXPORT_SPECIFIER;
  20943. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")),
  20944. parseExpression = $__6.parseExpression,
  20945. parseStatement = $__6.parseStatement,
  20946. parseStatements = $__6.parseStatements;
  20947. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")).prependStatements;
  20948. var ClosureModuleTransformer = function($__super) {
  20949. function ClosureModuleTransformer() {
  20950. $traceurRuntime.superConstructor(ClosureModuleTransformer).apply(this, arguments);
  20951. }
  20952. return ($traceurRuntime.createClass)(ClosureModuleTransformer, {
  20953. moduleProlog: function() {
  20954. if (!this.moduleName) {
  20955. throw new Error('Closure modules (goog.module) require a moduleName');
  20956. }
  20957. return parseStatements($traceurRuntime.getTemplateObject(["goog.module(", ");"]), this.moduleName);
  20958. },
  20959. wrapModule: function(statements) {
  20960. if (this.hasStarExports()) {
  20961. throw new Error('Closure modules (goog.module) do not support "export *"');
  20962. }
  20963. return statements;
  20964. },
  20965. addExportStatement: function(statements) {
  20966. if (!this.hasExports())
  20967. return statements;
  20968. var exportObject = this.getExportObject();
  20969. statements.push(parseStatement($traceurRuntime.getTemplateObject(["exports = ", ""]), exportObject));
  20970. return statements;
  20971. },
  20972. getGetterExport: function($__1) {
  20973. var $__2 = $__1,
  20974. name = $__2.name,
  20975. tree = $__2.tree,
  20976. moduleSpecifier = $__2.moduleSpecifier;
  20977. var expression;
  20978. switch (tree.type) {
  20979. case EXPORT_DEFAULT:
  20980. expression = createIdentifierExpression('$__default');
  20981. break;
  20982. case EXPORT_SPECIFIER:
  20983. if (moduleSpecifier) {
  20984. var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier);
  20985. expression = createMemberExpression(idName, tree.lhs);
  20986. } else {
  20987. expression = createPropertyNameAssignment(name, tree.lhs);
  20988. }
  20989. break;
  20990. default:
  20991. expression = createIdentifierExpression(name);
  20992. break;
  20993. }
  20994. return createPropertyNameAssignment(name, expression);
  20995. },
  20996. transformModuleSpecifier: function(tree) {
  20997. var moduleName = tree.token.processedValue;
  20998. return parseExpression($traceurRuntime.getTemplateObject(["goog.require(", ")"]), moduleName);
  20999. }
  21000. }, {}, $__super);
  21001. }(ModuleTransformer);
  21002. return {get ClosureModuleTransformer() {
  21003. return ClosureModuleTransformer;
  21004. }};
  21005. });
  21006. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js", [], function() {
  21007. "use strict";
  21008. var __moduleName = "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js";
  21009. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).ModuleTransformer;
  21010. var NAMED_EXPORT = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).NAMED_EXPORT;
  21011. var AnonBlock = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).AnonBlock;
  21012. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")),
  21013. parseExpression = $__6.parseExpression,
  21014. parsePropertyDefinition = $__6.parsePropertyDefinition,
  21015. parseStatement = $__6.parseStatement;
  21016. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")),
  21017. createExpressionStatement = $__7.createExpressionStatement,
  21018. createObjectLiteral = $__7.createObjectLiteral,
  21019. createObjectLiteralForDescriptor = $__7.createObjectLiteralForDescriptor,
  21020. createPropertyNameAssignment = $__7.createPropertyNameAssignment;
  21021. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).prependStatements;
  21022. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).FindVisitor;
  21023. var CommonJsModuleTransformer = function($__super) {
  21024. function CommonJsModuleTransformer(identifierGenerator, reporter) {
  21025. var options = arguments[2];
  21026. $traceurRuntime.superConstructor(CommonJsModuleTransformer).call(this, identifierGenerator, reporter, options);
  21027. this.anonymousModule = options && !options.bundle && options.moduleName !== true;
  21028. this.namedExportsWithModuleSpecifiers_ = [];
  21029. this.isImportingDefault_ = false;
  21030. this.needsInteropRequire_ = false;
  21031. }
  21032. return ($traceurRuntime.createClass)(CommonJsModuleTransformer, {
  21033. getModuleName: function(tree) {
  21034. if (this.anonymousModule)
  21035. return null;
  21036. return tree.moduleName;
  21037. },
  21038. wrapModule: function(statements) {
  21039. if (this.needsInteropRequire_) {
  21040. var req = parseStatement($traceurRuntime.getTemplateObject(["function $__interopRequire(id) {\n id = require(id);\n return id && id.__esModule && id || {default: id};\n }"]));
  21041. return prependStatements(statements, req);
  21042. }
  21043. return statements;
  21044. },
  21045. addExportStatement: function(statements) {
  21046. if (!this.hasExports()) {
  21047. return statements;
  21048. }
  21049. var descr = this.getExportDescriptors();
  21050. var exportObject = parseExpression($traceurRuntime.getTemplateObject(["Object.defineProperties(module.exports, ", ")"]), descr);
  21051. if (this.hasStarExports()) {
  21052. exportObject = this.getExportStar(exportObject);
  21053. }
  21054. return prependStatements.apply((void 0), $traceurRuntime.spread([statements], this.namedExportsWithModuleSpecifiers_, [createExpressionStatement(exportObject)]));
  21055. },
  21056. getExportDescriptors: function() {
  21057. var $__2 = this;
  21058. var properties = this.exportVisitor.getNonTypeNamedExports().map(function(exp) {
  21059. var f = parseExpression($traceurRuntime.getTemplateObject(["function() { return ", "; }"]), $__2.getGetterExportReturnExpression(exp));
  21060. return createPropertyNameAssignment(exp.name, createObjectLiteralForDescriptor({
  21061. enumerable: true,
  21062. get: f
  21063. }));
  21064. });
  21065. properties.unshift(parsePropertyDefinition($traceurRuntime.getTemplateObject(["__esModule: {value: true}"])));
  21066. return createObjectLiteral(properties);
  21067. },
  21068. transformExportDeclaration: function(tree) {
  21069. this.checkForDefaultImport_(tree);
  21070. this.exportVisitor.visitAny(tree);
  21071. var transformed = this.transformAny(tree.declaration);
  21072. if (tree.declaration.type == NAMED_EXPORT && tree.declaration.moduleSpecifier !== null) {
  21073. this.namedExportsWithModuleSpecifiers_.push(transformed);
  21074. return new AnonBlock(null, []);
  21075. }
  21076. return transformed;
  21077. },
  21078. transformImportDeclaration: function(tree) {
  21079. this.checkForDefaultImport_(tree);
  21080. return $traceurRuntime.superGet(this, CommonJsModuleTransformer.prototype, "transformImportDeclaration").call(this, tree);
  21081. },
  21082. checkForDefaultImport_: function(tree) {
  21083. var finder = new FindDefault();
  21084. finder.visitAny(tree);
  21085. this.isImportingDefault_ = finder.found;
  21086. },
  21087. transformModuleSpecifier: function(tree) {
  21088. var moduleName = tree.token.processedValue;
  21089. if (this.isImportingDefault_) {
  21090. this.needsInteropRequire_ = true;
  21091. return parseExpression($traceurRuntime.getTemplateObject(["$__interopRequire(", ")"]), moduleName);
  21092. }
  21093. return parseExpression($traceurRuntime.getTemplateObject(["require(", ")"]), moduleName);
  21094. }
  21095. }, {}, $__super);
  21096. }(ModuleTransformer);
  21097. var FindDefault = function($__super) {
  21098. function FindDefault() {
  21099. $traceurRuntime.superConstructor(FindDefault).apply(this, arguments);
  21100. }
  21101. return ($traceurRuntime.createClass)(FindDefault, {
  21102. visitImportSpecifier: function(tree) {
  21103. this.found = tree.name !== null && tree.name.value === 'default';
  21104. },
  21105. visitNameSpaceImport: function(tree) {
  21106. this.found = true;
  21107. },
  21108. visitNameSpaceExport: function(tree) {
  21109. this.found = true;
  21110. },
  21111. visitExportSpecifier: function(tree) {
  21112. this.found = tree.lhs !== null && tree.lhs.value === 'default';
  21113. }
  21114. }, {}, $__super);
  21115. }(FindVisitor);
  21116. return {get CommonJsModuleTransformer() {
  21117. return CommonJsModuleTransformer;
  21118. }};
  21119. });
  21120. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParameterTransformer.js", [], function() {
  21121. "use strict";
  21122. var __moduleName = "traceur@0.0.112/src/codegeneration/ParameterTransformer.js";
  21123. var FunctionBody = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).FunctionBody;
  21124. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).TempVarTransformer;
  21125. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).prependStatements;
  21126. var stack = [];
  21127. var ParameterTransformer = function($__super) {
  21128. function ParameterTransformer() {
  21129. $traceurRuntime.superConstructor(ParameterTransformer).apply(this, arguments);
  21130. }
  21131. return ($traceurRuntime.createClass)(ParameterTransformer, {
  21132. transformArrowFunction: function(tree) {
  21133. stack.push([]);
  21134. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformArrowFunction").call(this, tree);
  21135. },
  21136. transformFunctionDeclaration: function(tree) {
  21137. stack.push([]);
  21138. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  21139. },
  21140. transformFunctionExpression: function(tree) {
  21141. stack.push([]);
  21142. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionExpression").call(this, tree);
  21143. },
  21144. transformGetAccessor: function(tree) {
  21145. stack.push([]);
  21146. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformGetAccessor").call(this, tree);
  21147. },
  21148. transformSetAccessor: function(tree) {
  21149. stack.push([]);
  21150. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformSetAccessor").call(this, tree);
  21151. },
  21152. transformMethod: function(tree) {
  21153. stack.push([]);
  21154. return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformMethod").call(this, tree);
  21155. },
  21156. transformFunctionBody: function(tree) {
  21157. var transformedTree = $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionBody").call(this, tree);
  21158. var statements = stack.pop();
  21159. if (!statements.length)
  21160. return transformedTree;
  21161. statements = prependStatements.apply((void 0), $traceurRuntime.spread([transformedTree.statements], statements));
  21162. return new FunctionBody(transformedTree.location, statements);
  21163. },
  21164. get parameterStatements() {
  21165. return stack[stack.length - 1];
  21166. },
  21167. transformConstructorType: function(tree) {
  21168. return tree;
  21169. },
  21170. transformFunctionType: function(tree) {
  21171. return tree;
  21172. }
  21173. }, {}, $__super);
  21174. }(TempVarTransformer);
  21175. return {get ParameterTransformer() {
  21176. return ParameterTransformer;
  21177. }};
  21178. });
  21179. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js", [], function() {
  21180. "use strict";
  21181. var __moduleName = "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js";
  21182. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")),
  21183. isUndefined = $__1.isUndefined,
  21184. isVoidExpression = $__1.isVoidExpression;
  21185. var FormalParameterList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).FormalParameterList;
  21186. var ParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParameterTransformer.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).ParameterTransformer;
  21187. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).ARGUMENTS;
  21188. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")),
  21189. NOT_EQUAL_EQUAL = $__5.NOT_EQUAL_EQUAL,
  21190. VAR = $__5.VAR;
  21191. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")),
  21192. createBinaryExpression = $__6.createBinaryExpression,
  21193. createConditionalExpression = $__6.createConditionalExpression,
  21194. createIdentifierExpression = $__6.createIdentifierExpression,
  21195. createMemberLookupExpression = $__6.createMemberLookupExpression,
  21196. createNumberLiteral = $__6.createNumberLiteral,
  21197. createOperatorToken = $__6.createOperatorToken,
  21198. createVariableStatement = $__6.createVariableStatement,
  21199. createVoid0 = $__6.createVoid0;
  21200. function createDefaultAssignment(index, binding, initializer) {
  21201. var argumentsExpression = createMemberLookupExpression(createIdentifierExpression(ARGUMENTS), createNumberLiteral(index));
  21202. var assignmentExpression;
  21203. if (initializer === null || isUndefined(initializer) || isVoidExpression(initializer)) {
  21204. assignmentExpression = argumentsExpression;
  21205. } else {
  21206. assignmentExpression = createConditionalExpression(createBinaryExpression(argumentsExpression, createOperatorToken(NOT_EQUAL_EQUAL), createVoid0()), argumentsExpression, initializer);
  21207. }
  21208. return createVariableStatement(VAR, binding, assignmentExpression);
  21209. }
  21210. var DefaultParametersTransformer = function($__super) {
  21211. function DefaultParametersTransformer() {
  21212. $traceurRuntime.superConstructor(DefaultParametersTransformer).apply(this, arguments);
  21213. }
  21214. return ($traceurRuntime.createClass)(DefaultParametersTransformer, {transformFormalParameterList: function(tree) {
  21215. var parameters = [];
  21216. var changed = false;
  21217. var defaultToUndefined = false;
  21218. for (var i = 0; i < tree.parameters.length; i++) {
  21219. var param = this.transformAny(tree.parameters[i]);
  21220. if (param !== tree.parameters[i])
  21221. changed = true;
  21222. if (param.isRestParameter() || !param.parameter.initializer && !defaultToUndefined) {
  21223. parameters.push(param);
  21224. } else {
  21225. defaultToUndefined = true;
  21226. changed = true;
  21227. this.parameterStatements.push(createDefaultAssignment(i, param.parameter.binding, param.parameter.initializer));
  21228. }
  21229. }
  21230. if (!changed)
  21231. return tree;
  21232. return new FormalParameterList(tree.location, parameters);
  21233. }}, {}, $__super);
  21234. }(ParameterTransformer);
  21235. return {get DefaultParametersTransformer() {
  21236. return DefaultParametersTransformer;
  21237. }};
  21238. });
  21239. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js", [], function() {
  21240. "use strict";
  21241. var __moduleName = "traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js";
  21242. var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js")),
  21243. AMPERSAND = $__0.AMPERSAND,
  21244. AMPERSAND_EQUAL = $__0.AMPERSAND_EQUAL,
  21245. BAR = $__0.BAR,
  21246. BAR_EQUAL = $__0.BAR_EQUAL,
  21247. CARET = $__0.CARET,
  21248. CARET_EQUAL = $__0.CARET_EQUAL,
  21249. LEFT_SHIFT = $__0.LEFT_SHIFT,
  21250. LEFT_SHIFT_EQUAL = $__0.LEFT_SHIFT_EQUAL,
  21251. MINUS = $__0.MINUS,
  21252. MINUS_EQUAL = $__0.MINUS_EQUAL,
  21253. PERCENT = $__0.PERCENT,
  21254. PERCENT_EQUAL = $__0.PERCENT_EQUAL,
  21255. PLUS = $__0.PLUS,
  21256. PLUS_EQUAL = $__0.PLUS_EQUAL,
  21257. RIGHT_SHIFT = $__0.RIGHT_SHIFT,
  21258. RIGHT_SHIFT_EQUAL = $__0.RIGHT_SHIFT_EQUAL,
  21259. SLASH = $__0.SLASH,
  21260. SLASH_EQUAL = $__0.SLASH_EQUAL,
  21261. STAR = $__0.STAR,
  21262. STAR_EQUAL = $__0.STAR_EQUAL,
  21263. STAR_STAR = $__0.STAR_STAR,
  21264. STAR_STAR_EQUAL = $__0.STAR_STAR_EQUAL,
  21265. UNSIGNED_RIGHT_SHIFT = $__0.UNSIGNED_RIGHT_SHIFT,
  21266. UNSIGNED_RIGHT_SHIFT_EQUAL = $__0.UNSIGNED_RIGHT_SHIFT_EQUAL;
  21267. function assignmentOperatorToBinaryOperator(type) {
  21268. switch (type) {
  21269. case STAR_EQUAL:
  21270. return STAR;
  21271. case STAR_STAR_EQUAL:
  21272. return STAR_STAR;
  21273. case SLASH_EQUAL:
  21274. return SLASH;
  21275. case PERCENT_EQUAL:
  21276. return PERCENT;
  21277. case PLUS_EQUAL:
  21278. return PLUS;
  21279. case MINUS_EQUAL:
  21280. return MINUS;
  21281. case LEFT_SHIFT_EQUAL:
  21282. return LEFT_SHIFT;
  21283. case RIGHT_SHIFT_EQUAL:
  21284. return RIGHT_SHIFT;
  21285. case UNSIGNED_RIGHT_SHIFT_EQUAL:
  21286. return UNSIGNED_RIGHT_SHIFT;
  21287. case AMPERSAND_EQUAL:
  21288. return AMPERSAND;
  21289. case CARET_EQUAL:
  21290. return CARET;
  21291. case BAR_EQUAL:
  21292. return BAR;
  21293. default:
  21294. throw Error('unreachable');
  21295. }
  21296. }
  21297. var $__default = assignmentOperatorToBinaryOperator;
  21298. return {get default() {
  21299. return $__default;
  21300. }};
  21301. });
  21302. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js", [], function() {
  21303. "use strict";
  21304. var __moduleName = "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js";
  21305. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).ParseTreeTransformer;
  21306. var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")),
  21307. createAssignmentExpression = $__13.createAssignmentExpression,
  21308. createCommaExpression = $__13.createCommaExpression,
  21309. id = $__13.createIdentifierExpression,
  21310. createMemberExpression = $__13.createMemberExpression,
  21311. createNumberLiteral = $__13.createNumberLiteral,
  21312. createOperatorToken = $__13.createOperatorToken,
  21313. createParenExpression = $__13.createParenExpression;
  21314. var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")),
  21315. AND = $__14.AND,
  21316. EQUAL = $__14.EQUAL,
  21317. MINUS = $__14.MINUS,
  21318. MINUS_EQUAL = $__14.MINUS_EQUAL,
  21319. MINUS_MINUS = $__14.MINUS_MINUS,
  21320. OR = $__14.OR,
  21321. PLUS = $__14.PLUS,
  21322. PLUS_EQUAL = $__14.PLUS_EQUAL,
  21323. PLUS_PLUS = $__14.PLUS_PLUS;
  21324. var $__15 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")),
  21325. COMMA_EXPRESSION = $__15.COMMA_EXPRESSION,
  21326. IDENTIFIER_EXPRESSION = $__15.IDENTIFIER_EXPRESSION,
  21327. MEMBER_EXPRESSION = $__15.MEMBER_EXPRESSION,
  21328. MEMBER_LOOKUP_EXPRESSION = $__15.MEMBER_LOOKUP_EXPRESSION,
  21329. PROPERTY_NAME_ASSIGNMENT = $__15.PROPERTY_NAME_ASSIGNMENT,
  21330. SPREAD_EXPRESSION = $__15.SPREAD_EXPRESSION,
  21331. TEMPLATE_LITERAL_PORTION = $__15.TEMPLATE_LITERAL_PORTION;
  21332. var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")),
  21333. ArgumentList = $__16.ArgumentList,
  21334. ArrayLiteral = $__16.ArrayLiteral,
  21335. AwaitExpression = $__16.AwaitExpression,
  21336. BinaryExpression = $__16.BinaryExpression,
  21337. CallExpression = $__16.CallExpression,
  21338. ClassExpression = $__16.ClassExpression,
  21339. ConditionalExpression = $__16.ConditionalExpression,
  21340. MemberExpression = $__16.MemberExpression,
  21341. MemberLookupExpression = $__16.MemberLookupExpression,
  21342. NewExpression = $__16.NewExpression,
  21343. ObjectLiteral = $__16.ObjectLiteral,
  21344. PropertyNameAssignment = $__16.PropertyNameAssignment,
  21345. SpreadExpression = $__16.SpreadExpression,
  21346. TemplateLiteralExpression = $__16.TemplateLiteralExpression,
  21347. TemplateSubstitution = $__16.TemplateSubstitution,
  21348. UnaryExpression = $__16.UnaryExpression,
  21349. YieldExpression = $__16.YieldExpression;
  21350. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).assert;
  21351. var assignmentOperatorToBinaryOperator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./assignmentOperatorToBinaryOperator.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).default;
  21352. var CommaExpressionBuilder = function() {
  21353. function CommaExpressionBuilder(tempVar) {
  21354. this.tempVar = tempVar;
  21355. this.expressions = [];
  21356. }
  21357. return ($traceurRuntime.createClass)(CommaExpressionBuilder, {
  21358. add: function(tree) {
  21359. var $__2;
  21360. if (tree.type === COMMA_EXPRESSION)
  21361. ($__2 = this.expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(tree)));
  21362. return this;
  21363. },
  21364. build: function(tree) {
  21365. var tempVar = this.tempVar;
  21366. this.expressions.push(createAssignmentExpression(tempVar, tree), tempVar);
  21367. return createCommaExpression(this.expressions);
  21368. }
  21369. }, {});
  21370. }();
  21371. function getResult(tree) {
  21372. if (tree.type === COMMA_EXPRESSION)
  21373. return tree.expressions[tree.expressions.length - 1];
  21374. return tree;
  21375. }
  21376. function getExpressions(tree) {
  21377. if (tree.type === COMMA_EXPRESSION)
  21378. return tree.expressions.slice(0, -1);
  21379. return [];
  21380. }
  21381. var ExplodeExpressionTransformer = function($__super) {
  21382. function ExplodeExpressionTransformer(tempVarTransformer) {
  21383. $traceurRuntime.superConstructor(ExplodeExpressionTransformer).call(this);
  21384. this.tempVarTransformer_ = tempVarTransformer;
  21385. }
  21386. return ($traceurRuntime.createClass)(ExplodeExpressionTransformer, {
  21387. addTempVar: function() {
  21388. var tmpId = this.tempVarTransformer_.addTempVar();
  21389. return id(tmpId);
  21390. },
  21391. transformUnaryExpression: function(tree) {
  21392. if (tree.operator.type === PLUS_PLUS)
  21393. return this.transformUnaryNumeric_(tree, PLUS_EQUAL);
  21394. if (tree.operator.type === MINUS_MINUS)
  21395. return this.transformUnaryNumeric_(tree, MINUS_EQUAL);
  21396. var operand = this.transformAny(tree.operand);
  21397. if (operand === tree.operand)
  21398. return tree;
  21399. var expressions = $traceurRuntime.spread(getExpressions(operand), [new UnaryExpression(tree.location, tree.operator, getResult(operand))]);
  21400. return createCommaExpression(expressions);
  21401. },
  21402. transformUnaryNumeric_: function(tree, operator) {
  21403. return this.transformAny(new BinaryExpression(tree.location, tree.operand, createOperatorToken(operator), createNumberLiteral(1)));
  21404. },
  21405. transformPostfixExpression: function(tree) {
  21406. if (tree.operand.type === MEMBER_EXPRESSION)
  21407. return this.transformPostfixMemberExpression_(tree);
  21408. if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION)
  21409. return this.transformPostfixMemberLookupExpression_(tree);
  21410. assert(tree.operand.type === IDENTIFIER_EXPRESSION);
  21411. var operand = tree.operand;
  21412. var tmp = this.addTempVar();
  21413. var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;
  21414. var expressions = [createAssignmentExpression(tmp, operand), createAssignmentExpression(operand, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp];
  21415. return createCommaExpression(expressions);
  21416. },
  21417. transformPostfixMemberExpression_: function(tree) {
  21418. var memberName = tree.operand.memberName;
  21419. var operand = this.transformAny(tree.operand.operand);
  21420. var tmp = this.addTempVar();
  21421. var memberExpression = new MemberExpression(tree.operand.location, getResult(operand), memberName);
  21422. var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;
  21423. var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(memberExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]);
  21424. return createCommaExpression(expressions);
  21425. },
  21426. transformPostfixMemberLookupExpression_: function(tree) {
  21427. var memberExpression = this.transformAny(tree.operand.memberExpression);
  21428. var operand = this.transformAny(tree.operand.operand);
  21429. var tmp = this.addTempVar();
  21430. var memberLookupExpression = new MemberLookupExpression(null, getResult(operand), getResult(memberExpression));
  21431. var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS;
  21432. var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(memberLookupExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]);
  21433. return createCommaExpression(expressions);
  21434. },
  21435. transformYieldExpression: function(tree) {
  21436. if (tree.expression === null) {
  21437. return this.createCommaExpressionBuilder_().build(new YieldExpression(tree.location, null, false));
  21438. }
  21439. var expression = this.transformAny(tree.expression);
  21440. return this.createCommaExpressionBuilder_().add(expression).build(new YieldExpression(tree.location, getResult(expression), tree.isYieldFor));
  21441. },
  21442. transformAwaitExpression: function(tree) {
  21443. var expression = this.transformAny(tree.expression);
  21444. return this.createCommaExpressionBuilder_().add(expression).build(new AwaitExpression(tree.location, getResult(expression)));
  21445. },
  21446. transformParenExpression: function(tree) {
  21447. var expression = this.transformAny(tree.expression);
  21448. if (expression === tree.expression)
  21449. return tree;
  21450. var result = getResult(expression);
  21451. if (result.type === IDENTIFIER_EXPRESSION)
  21452. return expression;
  21453. return this.createCommaExpressionBuilder_().add(expression).build(result);
  21454. },
  21455. transformCommaExpression: function(tree) {
  21456. var expressions = this.transformList(tree.expressions);
  21457. if (expressions === tree.expressions)
  21458. return tree;
  21459. var builder = new CommaExpressionBuilder(null);
  21460. for (var i = 0; i < expressions.length; i++) {
  21461. builder.add(expressions[i]);
  21462. }
  21463. return createCommaExpression($traceurRuntime.spread(builder.expressions, [getResult(expressions[expressions.length - 1])]));
  21464. },
  21465. transformMemberExpression: function(tree) {
  21466. var operand = this.transformAny(tree.operand);
  21467. return this.createCommaExpressionBuilder_().add(operand).build(new MemberExpression(tree.location, getResult(operand), tree.memberName));
  21468. },
  21469. transformMemberLookupExpression: function(tree) {
  21470. var operand = this.transformAny(tree.operand);
  21471. var memberExpression = this.transformAny(tree.memberExpression);
  21472. return this.createCommaExpressionBuilder_().add(operand).add(memberExpression).build(new MemberLookupExpression(tree.location, getResult(operand), getResult(memberExpression)));
  21473. },
  21474. transformBinaryExpression: function(tree) {
  21475. if (tree.operator.isAssignmentOperator())
  21476. return this.transformAssignmentExpression_(tree);
  21477. var left = this.transformAny(tree.left);
  21478. var right = this.transformAny(tree.right);
  21479. if (left === tree.left && right === tree.right)
  21480. return tree;
  21481. if (tree.operator.type === OR)
  21482. return this.transformOr_(left, right);
  21483. if (tree.operator.type === AND)
  21484. return this.transformAnd_(left, right);
  21485. var expressions = $traceurRuntime.spread(getExpressions(left), getExpressions(right), [new BinaryExpression(tree.location, getResult(left), tree.operator, getResult(right))]);
  21486. return createCommaExpression(expressions);
  21487. },
  21488. transformAssignmentExpression_: function(tree) {
  21489. var left = tree.left;
  21490. if (left.type === MEMBER_EXPRESSION)
  21491. return this.transformAssignMemberExpression_(tree);
  21492. if (left.type === MEMBER_LOOKUP_EXPRESSION)
  21493. return this.transformAssignMemberLookupExpression_(tree);
  21494. assert(tree.left.type === IDENTIFIER_EXPRESSION);
  21495. if (tree.operator.type === EQUAL) {
  21496. left = this.transformAny(left);
  21497. var right$__3 = this.transformAny(tree.right);
  21498. var expressions$__4 = $traceurRuntime.spread(getExpressions(right$__3), [createAssignmentExpression(left, getResult(right$__3)), getResult(right$__3)]);
  21499. return createCommaExpression(expressions$__4);
  21500. }
  21501. var right = this.transformAny(tree.right);
  21502. var tmp = this.addTempVar();
  21503. var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));
  21504. var expressions = $traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(tmp, new BinaryExpression(tree.location, left, binop, getResult(right))), createAssignmentExpression(left, tmp), tmp]);
  21505. return createCommaExpression(expressions);
  21506. },
  21507. transformAssignMemberExpression_: function(tree) {
  21508. var left = tree.left;
  21509. if (tree.operator.type === EQUAL) {
  21510. var operand$__5 = this.transformAny(left.operand);
  21511. var right$__6 = this.transformAny(tree.right);
  21512. var expressions$__7 = $traceurRuntime.spread(getExpressions(operand$__5), getExpressions(right$__6), [new BinaryExpression(tree.location, new MemberExpression(left.location, getResult(operand$__5), left.memberName), tree.operator, getResult(right$__6)), getResult(right$__6)]);
  21513. return createCommaExpression(expressions$__7);
  21514. }
  21515. var operand = this.transformAny(left.operand);
  21516. var right = this.transformAny(tree.right);
  21517. var tmp = this.addTempVar();
  21518. var memberExpression = new MemberExpression(left.location, getResult(operand), left.memberName);
  21519. var tmp2 = this.addTempVar();
  21520. var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));
  21521. var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(right), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberExpression, tmp2), tmp2]);
  21522. return createCommaExpression(expressions);
  21523. },
  21524. transformAssignMemberLookupExpression_: function(tree) {
  21525. var left = tree.left;
  21526. if (tree.operator.type === EQUAL) {
  21527. var operand$__8 = this.transformAny(left.operand);
  21528. var memberExpression$__9 = this.transformAny(left.memberExpression);
  21529. var right$__10 = this.transformAny(tree.right);
  21530. var expressions$__11 = $traceurRuntime.spread(getExpressions(operand$__8), getExpressions(memberExpression$__9), getExpressions(right$__10), [new BinaryExpression(tree.location, new MemberLookupExpression(left.location, getResult(operand$__8), getResult(memberExpression$__9)), tree.operator, getResult(right$__10)), getResult(right$__10)]);
  21531. return createCommaExpression(expressions$__11);
  21532. }
  21533. var operand = this.transformAny(left.operand);
  21534. var memberExpression = this.transformAny(left.memberExpression);
  21535. var right = this.transformAny(tree.right);
  21536. var tmp = this.addTempVar();
  21537. var memberLookupExpression = new MemberLookupExpression(left.location, getResult(operand), getResult(memberExpression));
  21538. var tmp2 = this.addTempVar();
  21539. var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type));
  21540. var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), getExpressions(right), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberLookupExpression, tmp2), tmp2]);
  21541. return createCommaExpression(expressions);
  21542. },
  21543. transformArrayLiteral: function(tree) {
  21544. var elements = this.transformList(tree.elements);
  21545. if (elements === tree.elements)
  21546. return tree;
  21547. var builder = this.createCommaExpressionBuilder_();
  21548. var results = [];
  21549. for (var i = 0; i < elements.length; i++) {
  21550. builder.add(elements[i]);
  21551. results.push(getResult(elements[i]));
  21552. }
  21553. return builder.build(new ArrayLiteral(tree.location, results));
  21554. },
  21555. transformObjectLiteral: function(tree) {
  21556. var propertyNameAndValues = this.transformList(tree.propertyNameAndValues);
  21557. if (propertyNameAndValues === tree.propertyNameAndValues)
  21558. return tree;
  21559. var builder = this.createCommaExpressionBuilder_();
  21560. var results = [];
  21561. for (var i = 0; i < propertyNameAndValues.length; i++) {
  21562. if (propertyNameAndValues[i].type === PROPERTY_NAME_ASSIGNMENT) {
  21563. builder.add(propertyNameAndValues[i].value);
  21564. results.push(new PropertyNameAssignment(propertyNameAndValues[i].location, propertyNameAndValues[i].name, getResult(propertyNameAndValues[i].value)));
  21565. } else {
  21566. results.push(propertyNameAndValues[i]);
  21567. }
  21568. }
  21569. return builder.build(new ObjectLiteral(tree.location, results));
  21570. },
  21571. transformTemplateLiteralExpression: function(tree) {
  21572. var operand = this.transformAny(tree.operand);
  21573. var elements = this.transformList(tree.elements);
  21574. if (!operand && operand === tree.operand && elements === tree.elements)
  21575. return tree;
  21576. var builder = this.createCommaExpressionBuilder_();
  21577. if (operand)
  21578. builder.add(operand);
  21579. var results = [];
  21580. for (var i = 0; i < elements.length; i++) {
  21581. if (elements[i].type === TEMPLATE_LITERAL_PORTION) {
  21582. results.push(elements[i]);
  21583. } else {
  21584. var expression = elements[i].expression;
  21585. builder.add(expression);
  21586. var result = getResult(expression);
  21587. results.push(new TemplateSubstitution(expression.location, result));
  21588. }
  21589. }
  21590. return builder.build(new TemplateLiteralExpression(tree.location, operand && getResult(operand), results));
  21591. },
  21592. transformCallExpression: function(tree) {
  21593. if (tree.operand.type === MEMBER_EXPRESSION)
  21594. return this.transformCallMemberExpression_(tree);
  21595. if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION)
  21596. return this.transformCallMemberLookupExpression_(tree);
  21597. return this.transformCallAndNew_(tree, CallExpression);
  21598. },
  21599. transformNewExpression: function(tree) {
  21600. return this.transformCallAndNew_(tree, NewExpression);
  21601. },
  21602. transformCallAndNew_: function(tree, ctor) {
  21603. var operand = this.transformAny(tree.operand);
  21604. var args = this.transformAny(tree.args);
  21605. var builder = this.createCommaExpressionBuilder_().add(operand);
  21606. var argResults = [];
  21607. args.args.forEach(function(arg) {
  21608. builder.add(arg);
  21609. argResults.push(getResult(arg));
  21610. });
  21611. return builder.build(new ctor(tree.location, getResult(operand), new ArgumentList(args.location, argResults)));
  21612. },
  21613. transformCallMemberExpression_: function(tree) {
  21614. var memberName = tree.operand.memberName;
  21615. var operand = this.transformAny(tree.operand.operand);
  21616. var tmp = this.addTempVar();
  21617. var memberExpresssion = new MemberExpression(tree.operand.location, getResult(operand), memberName);
  21618. var args = this.transformAny(tree.args);
  21619. var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpresssion)]);
  21620. var argResults = [getResult(operand)];
  21621. args.args.forEach(function(arg) {
  21622. var $__2;
  21623. ($__2 = expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(arg)));
  21624. argResults.push(getResult(arg));
  21625. });
  21626. var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults));
  21627. var tmp2 = this.addTempVar();
  21628. expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2);
  21629. return createCommaExpression(expressions);
  21630. },
  21631. transformCallMemberLookupExpression_: function(tree) {
  21632. var operand = this.transformAny(tree.operand.operand);
  21633. var memberExpression = this.transformAny(tree.operand.memberExpression);
  21634. var tmp = this.addTempVar();
  21635. var lookupExpresssion = new MemberLookupExpression(tree.operand.location, getResult(operand), getResult(memberExpression));
  21636. var args = this.transformAny(tree.args);
  21637. var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, lookupExpresssion)]);
  21638. var argResults = [getResult(operand)];
  21639. args.args.forEach(function(arg, i) {
  21640. var $__2;
  21641. ($__2 = expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(arg)));
  21642. var result = getResult(arg);
  21643. if (tree.args.args[i].type === SPREAD_EXPRESSION)
  21644. result = new SpreadExpression(arg.location, result);
  21645. argResults.push(result);
  21646. });
  21647. var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults));
  21648. var tmp2 = this.addTempVar();
  21649. expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2);
  21650. return createCommaExpression(expressions);
  21651. },
  21652. transformConditionalExpression: function(tree) {
  21653. var condition = this.transformAny(tree.condition);
  21654. var left = this.transformAny(tree.left);
  21655. var right = this.transformAny(tree.right);
  21656. if (condition === tree.condition && left === tree.left && right === tree.right)
  21657. return tree;
  21658. var res = this.addTempVar();
  21659. var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(left), [createAssignmentExpression(res, getResult(left))]));
  21660. var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));
  21661. var expressions = $traceurRuntime.spread(getExpressions(condition), [new ConditionalExpression(tree.location, getResult(condition), createParenExpression(leftTree), createParenExpression(rightTree)), res]);
  21662. return createCommaExpression(expressions);
  21663. },
  21664. transformOr_: function(left, right) {
  21665. var res = this.addTempVar();
  21666. var leftTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]);
  21667. var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));
  21668. var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]);
  21669. return createCommaExpression(expressions);
  21670. },
  21671. transformAnd_: function(left, right) {
  21672. var res = this.addTempVar();
  21673. var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))]));
  21674. var rightTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]);
  21675. var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]);
  21676. return createCommaExpression(expressions);
  21677. },
  21678. transformSpreadExpression: function(tree) {
  21679. var expression = this.transformAny(tree.expression);
  21680. if (expression === tree.expression)
  21681. return tree;
  21682. var result = getResult(expression);
  21683. if (result.type !== SPREAD_EXPRESSION)
  21684. result = new SpreadExpression(result.location, result);
  21685. var expressions = $traceurRuntime.spread(getExpressions(expression), [result]);
  21686. return createCommaExpression(expressions);
  21687. },
  21688. transformFunctionExpression: function(tree) {
  21689. return this.createCommaExpressionBuilder_().build(tree);
  21690. },
  21691. transformArrowFunction: function(tree) {
  21692. return this.createCommaExpressionBuilder_().build(tree);
  21693. },
  21694. transformClassExpression: function(tree) {
  21695. var superClass = this.transformAny(tree.superClass);
  21696. if (superClass === tree.superClass) {
  21697. return this.createCommaExpressionBuilder_().build(tree);
  21698. }
  21699. var builder = this.createCommaExpressionBuilder_();
  21700. builder.add(superClass);
  21701. return builder.build(new ClassExpression(tree.location, tree.name, getResult(superClass), tree.elements, tree.annotations, tree.typeParameters));
  21702. },
  21703. transformFunctionBody: function(tree) {
  21704. return tree;
  21705. },
  21706. createCommaExpressionBuilder_: function() {
  21707. return new CommaExpressionBuilder(this.addTempVar());
  21708. }
  21709. }, {}, $__super);
  21710. }(ParseTreeTransformer);
  21711. return {get ExplodeExpressionTransformer() {
  21712. return ExplodeExpressionTransformer;
  21713. }};
  21714. });
  21715. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js", [], function() {
  21716. "use strict";
  21717. var __moduleName = "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js";
  21718. var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).ExplodeExpressionTransformer;
  21719. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).TempVarTransformer;
  21720. var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).ParenTrait;
  21721. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")),
  21722. STAR_STAR = $__4.STAR_STAR,
  21723. STAR_STAR_EQUAL = $__4.STAR_STAR_EQUAL;
  21724. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).parseExpression;
  21725. var ExponentiationTransformer = function($__super) {
  21726. function ExponentiationTransformer() {
  21727. $traceurRuntime.superConstructor(ExponentiationTransformer).apply(this, arguments);
  21728. }
  21729. return ($traceurRuntime.createClass)(ExponentiationTransformer, {transformBinaryExpression: function(tree) {
  21730. switch (tree.operator.type) {
  21731. case STAR_STAR:
  21732. {
  21733. var left = this.transformAny(tree.left);
  21734. var right = this.transformAny(tree.right);
  21735. return parseExpression($traceurRuntime.getTemplateObject(["Math.pow(", ", ", ")"]), left, right);
  21736. }
  21737. case STAR_STAR_EQUAL:
  21738. {
  21739. var exploded = new ExplodeExpressionTransformer(this).transformAny(tree);
  21740. return this.transformAny(exploded);
  21741. }
  21742. }
  21743. return $traceurRuntime.superGet(this, ExponentiationTransformer.prototype, "transformBinaryExpression").call(this, tree);
  21744. }}, {}, $__super);
  21745. }(ParenTrait(TempVarTransformer));
  21746. return {get ExponentiationTransformer() {
  21747. return ExponentiationTransformer;
  21748. }};
  21749. });
  21750. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ForOfTransformer.js", [], function() {
  21751. "use strict";
  21752. var __moduleName = "traceur@0.0.112/src/codegeneration/ForOfTransformer.js";
  21753. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")),
  21754. FOR_OF_STATEMENT = $__1.FOR_OF_STATEMENT,
  21755. VARIABLE_DECLARATION_LIST = $__1.VARIABLE_DECLARATION_LIST,
  21756. LABELLED_STATEMENT = $__1.LABELLED_STATEMENT;
  21757. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")).TempVarTransformer;
  21758. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")),
  21759. id = $__3.createIdentifierExpression,
  21760. createMemberExpression = $__3.createMemberExpression,
  21761. createVariableStatement = $__3.createVariableStatement;
  21762. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")),
  21763. parseStatement = $__4.parseStatement,
  21764. parseStatements = $__4.parseStatements;
  21765. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")),
  21766. AnonBlock = $__5.AnonBlock,
  21767. LabelledStatement = $__5.LabelledStatement;
  21768. var ForOfTransformer = function($__super) {
  21769. function ForOfTransformer() {
  21770. $traceurRuntime.superConstructor(ForOfTransformer).apply(this, arguments);
  21771. }
  21772. return ($traceurRuntime.createClass)(ForOfTransformer, {
  21773. transformForOfStatement: function(original) {
  21774. return this.transformForOfStatement_(original, []);
  21775. },
  21776. transformForOfStatement_: function(original, labelSet) {
  21777. var tree = $traceurRuntime.superGet(this, ForOfTransformer.prototype, "transformForOfStatement").call(this, original);
  21778. var iter = id(this.getTempIdentifier());
  21779. var result = id(this.getTempIdentifier());
  21780. var label = id(this.getTempIdentifier());
  21781. var normalCompletion = id(this.getTempIdentifier());
  21782. var throwCompletion = id(this.getTempIdentifier());
  21783. var exception = id(this.getTempIdentifier());
  21784. var ex = id(this.getTempIdentifier());
  21785. var labelledStatement;
  21786. var innerStatement;
  21787. var assignment;
  21788. if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {
  21789. assignment = createVariableStatement(tree.initializer.declarationType, tree.initializer.declarations[0].lvalue, createMemberExpression(result, 'value'));
  21790. } else {
  21791. assignment = parseStatement($traceurRuntime.getTemplateObject(["", " = ", ".value;"]), tree.initializer, result);
  21792. }
  21793. innerStatement = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", ",\n ", " = (", ")[Symbol.iterator]();\n !(", " = (", " = ", ".next()).done);\n ", " = true) {\n ", "\n ", "\n }"]), result, iter, tree.collection, normalCompletion, result, iter, normalCompletion, assignment, tree.body);
  21794. while (labelledStatement = labelSet.pop()) {
  21795. innerStatement = new LabelledStatement(labelledStatement.location, labelledStatement.name, innerStatement);
  21796. }
  21797. return new AnonBlock(null, parseStatements($traceurRuntime.getTemplateObject(["\n var ", " = true;\n var ", " = false;\n var ", " = undefined;\n try {\n ", "\n } catch (", ") {\n ", " = true;\n ", " = ", ";\n } finally {\n try {\n if (!", " && ", ".return != null) {\n ", ".return();\n }\n } finally {\n if (", ") {\n throw ", ";\n }\n }\n }"]), normalCompletion, throwCompletion, exception, innerStatement, ex, throwCompletion, exception, ex, normalCompletion, iter, iter, throwCompletion, exception));
  21798. },
  21799. transformLabelledStatement: function(tree) {
  21800. var labelSet = [tree];
  21801. var statement = tree.statement;
  21802. while (statement.type === LABELLED_STATEMENT) {
  21803. labelSet.push(statement);
  21804. statement = statement.statement;
  21805. }
  21806. if (statement.type !== FOR_OF_STATEMENT) {
  21807. return $traceurRuntime.superGet(this, ForOfTransformer.prototype, "transformLabelledStatement").call(this, tree);
  21808. }
  21809. return this.transformForOfStatement_(statement, labelSet);
  21810. }
  21811. }, {}, $__super);
  21812. }(TempVarTransformer);
  21813. return {get ForOfTransformer() {
  21814. return ForOfTransformer;
  21815. }};
  21816. });
  21817. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js", [], function() {
  21818. "use strict";
  21819. var __moduleName = "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js";
  21820. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).ParseTreeTransformer;
  21821. var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).default;
  21822. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")),
  21823. parseStatement = $__4.parseStatement,
  21824. parseStatements = $__4.parseStatements;
  21825. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")),
  21826. AnonBlock = $__5.AnonBlock,
  21827. Block = $__5.Block,
  21828. ContinueStatement = $__5.ContinueStatement,
  21829. LabelledStatement = $__5.LabelledStatement,
  21830. ReturnStatement = $__5.ReturnStatement;
  21831. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).StringSet;
  21832. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")),
  21833. createAssignmentStatement = $__7.createAssignmentStatement,
  21834. createCaseClause = $__7.createCaseClause,
  21835. createDefaultClause = $__7.createDefaultClause,
  21836. id = $__7.createIdentifierExpression,
  21837. createNumberLiteral = $__7.createNumberLiteral,
  21838. createSwitchStatement = $__7.createSwitchStatement,
  21839. createThisExpression = $__7.createThisExpression,
  21840. createVariableStatement = $__7.createVariableStatement,
  21841. createVariableDeclaration = $__7.createVariableDeclaration,
  21842. createVariableDeclarationList = $__7.createVariableDeclarationList,
  21843. createVoid0 = $__7.createVoid0;
  21844. var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).default;
  21845. var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).ARGUMENTS;
  21846. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).VAR;
  21847. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")),
  21848. VARIABLE_DECLARATION_LIST = $__11.VARIABLE_DECLARATION_LIST,
  21849. BLOCK = $__11.BLOCK;
  21850. var InnerForOnTransformer = function($__super) {
  21851. function InnerForOnTransformer(tempIdGenerator, labelSet, options) {
  21852. var $__1;
  21853. $traceurRuntime.superConstructor(InnerForOnTransformer).call(this);
  21854. this.idGenerator_ = tempIdGenerator;
  21855. this.inLoop_ = 0;
  21856. this.inBreakble_ = 0;
  21857. this.variableDeclarations_ = [];
  21858. this.extractedStatements_ = [];
  21859. this.labelSet_ = labelSet;
  21860. this.labelledStatements_ = new StringSet();
  21861. this.observer_ = id(this.idGenerator_.getTempIdentifier());
  21862. this.result_ = id(this.idGenerator_.getTempIdentifier());
  21863. this.parentLabels_ = new StringSet();
  21864. this.labelSet_.forEach(($__1 = this, function(tree) {
  21865. $__1.parentLabels_.add(tree.name.value);
  21866. }));
  21867. this.options = options;
  21868. }
  21869. return ($traceurRuntime.createClass)(InnerForOnTransformer, {
  21870. transform: function(tree) {
  21871. var value = id(this.idGenerator_.getTempIdentifier());
  21872. var assignment;
  21873. if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {
  21874. assignment = createVariableStatement(tree.initializer.declarationType, tree.initializer.declarations[0].lvalue, value);
  21875. } else {
  21876. assignment = parseStatement($traceurRuntime.getTemplateObject(["\n ", " = ", ";"]), tree.initializer, value);
  21877. }
  21878. var body;
  21879. if (tree.body.type === BLOCK) {
  21880. body = new Block(tree.body.location, $traceurRuntime.spread([assignment], tree.body.statements));
  21881. } else {
  21882. body = new Block(null, [assignment, tree.body]);
  21883. }
  21884. body = this.transformAny(body);
  21885. body = alphaRenameThisAndArguments(this, body);
  21886. this.variableDeclarations_.push(createVariableDeclaration(this.result_, createVoid0()));
  21887. var caseClauses = this.extractedStatements_.map(function(statement, index) {
  21888. return createCaseClause(createNumberLiteral(index), [statement]);
  21889. });
  21890. caseClauses.push(createCaseClause(createVoid0(), [new ContinueStatement(null, null)]));
  21891. caseClauses.push(createDefaultClause(parseStatements($traceurRuntime.getTemplateObject(["\n return ", ".v;"]), this.result_)));
  21892. var switchStatement = createSwitchStatement(this.result_, caseClauses);
  21893. var observeForEach = this.idGenerator_.getRuntimeExpression('observeForEach');
  21894. var statement = parseStatement($traceurRuntime.getTemplateObject(["\n do {\n ", "\n await ", "(\n ", "[Symbol.observer].bind(", "),\n async function (", ") {\n var ", " = this;\n try {\n ", "\n } catch (e) {\n ", ".throw(e);\n }\n });\n ", "\n } while (false);"]), createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)), observeForEach, tree.observable, tree.observable, value, this.observer_, body, this.observer_, switchStatement);
  21895. var labelledStatement;
  21896. while (labelledStatement = this.labelSet_.pop()) {
  21897. statement = new LabelledStatement(labelledStatement.location, labelledStatement.name, statement);
  21898. }
  21899. return statement;
  21900. },
  21901. addTempVarForArguments: function() {
  21902. var tmpVarName = this.idGenerator_.generateUniqueIdentifier();
  21903. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, id(ARGUMENTS)));
  21904. return tmpVarName;
  21905. },
  21906. addTempVarForThis: function() {
  21907. var tmpVarName = this.idGenerator_.generateUniqueIdentifier();
  21908. this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression()));
  21909. return tmpVarName;
  21910. },
  21911. transformAny: function(tree) {
  21912. if (tree) {
  21913. if (tree.isBreakableStatement())
  21914. this.inBreakble_++;
  21915. if (tree.isIterationStatement())
  21916. this.inLoop_++;
  21917. tree = $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformAny").call(this, tree);
  21918. if (tree.isBreakableStatement())
  21919. this.inBreakble_--;
  21920. if (tree.isIterationStatement())
  21921. this.inLoop_--;
  21922. }
  21923. return tree;
  21924. },
  21925. transformReturnStatement: function(tree) {
  21926. return new AnonBlock(tree.location, parseStatements($traceurRuntime.getTemplateObject(["\n ", ".return();\n ", " = {v: ", "};\n return;"]), this.observer_, this.result_, (tree.expression || createVoid0())));
  21927. },
  21928. transformAbruptCompletion_: function(tree) {
  21929. this.extractedStatements_.push(tree);
  21930. var index = this.extractedStatements_.length - 1;
  21931. return new AnonBlock(null, parseStatements($traceurRuntime.getTemplateObject(["\n ", ".return();\n ", " = ", ";\n return;"]), this.observer_, this.result_, index));
  21932. },
  21933. transformBreakStatement: function(tree) {
  21934. if (!tree.name) {
  21935. if (this.inBreakble_) {
  21936. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformBreakStatement").call(this, tree);
  21937. }
  21938. return this.transformAbruptCompletion_(new ContinueStatement(tree.location, null));
  21939. }
  21940. if (this.labelledStatements_.has(tree.name.value)) {
  21941. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformBreakStatement").call(this, tree);
  21942. }
  21943. return this.transformAbruptCompletion_(tree);
  21944. },
  21945. transformContinueStatement: function(tree) {
  21946. if (!tree.name) {
  21947. if (this.inLoop_) {
  21948. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformContinueStatement").call(this, tree);
  21949. }
  21950. return new ReturnStatement(tree.location, null);
  21951. }
  21952. if (this.labelledStatements_.has(tree.name.value)) {
  21953. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformContinueStatement").call(this, tree);
  21954. }
  21955. if (this.parentLabels_.has(tree.name.value)) {
  21956. return new ReturnStatement(tree.location, null);
  21957. }
  21958. return this.transformAbruptCompletion_(tree);
  21959. },
  21960. transformLabelledStatement: function(tree) {
  21961. this.labelledStatements_.add(tree.name.value);
  21962. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformLabelledStatement").call(this, tree);
  21963. },
  21964. transformVariableStatement: function(tree) {
  21965. var $__1 = this;
  21966. if (tree.declarations.declarationType === VAR) {
  21967. var assignments = [];
  21968. tree.declarations.declarations.forEach(function(variableDeclaration) {
  21969. var variableName = variableDeclaration.lvalue.getStringValue();
  21970. var initializer = $traceurRuntime.superGet($__1, InnerForOnTransformer.prototype, "transformAny").call($__1, variableDeclaration.initializer);
  21971. $__1.variableDeclarations_.push(createVariableDeclaration(variableName, null));
  21972. assignments.push(createAssignmentStatement(id(variableName), initializer));
  21973. });
  21974. return new AnonBlock(null, assignments);
  21975. }
  21976. return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformVariableStatement").call(this, tree);
  21977. }
  21978. }, {transform: function(tempIdGenerator, tree, labelSet) {
  21979. return new InnerForOnTransformer(tempIdGenerator, labelSet).transform(tree);
  21980. }}, $__super);
  21981. }(SkipFunctionsTransformerTrait(ParseTreeTransformer));
  21982. return {get InnerForOnTransformer() {
  21983. return InnerForOnTransformer;
  21984. }};
  21985. });
  21986. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ForOnTransformer.js", [], function() {
  21987. "use strict";
  21988. var __moduleName = "traceur@0.0.112/src/codegeneration/ForOnTransformer.js";
  21989. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")),
  21990. FOR_ON_STATEMENT = $__1.FOR_ON_STATEMENT,
  21991. LABELLED_STATEMENT = $__1.LABELLED_STATEMENT;
  21992. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).default;
  21993. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).TempVarTransformer;
  21994. var InnerForOnTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InnerForOnTransformer.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).InnerForOnTransformer;
  21995. var ForOnTransformer = function($__super) {
  21996. function ForOnTransformer() {
  21997. $traceurRuntime.superConstructor(ForOnTransformer).apply(this, arguments);
  21998. }
  21999. return ($traceurRuntime.createClass)(ForOnTransformer, {
  22000. transformForOnStatement: function(original) {
  22001. return this.transformForOnStatement_(original, []);
  22002. },
  22003. transformForOnStatement_: function(original, labelSet) {
  22004. return InnerForOnTransformer.transform(this, $traceurRuntime.superGet(this, ForOnTransformer.prototype, "transformForOnStatement").call(this, original), labelSet);
  22005. },
  22006. transformLabelledStatement: function(tree) {
  22007. var labelSet = [tree];
  22008. var statement;
  22009. for (statement = tree.statement; statement.type === LABELLED_STATEMENT; statement = statement.statement) {
  22010. labelSet.push(statement);
  22011. }
  22012. if (statement.type !== FOR_ON_STATEMENT) {
  22013. return $traceurRuntime.superGet(this, ForOnTransformer.prototype, "transformLabelledStatement").call(this, tree);
  22014. }
  22015. return this.transformForOnStatement_(statement, labelSet);
  22016. }
  22017. }, {}, $__super);
  22018. }(ImportRuntimeTrait(TempVarTransformer));
  22019. return {get ForOnTransformer() {
  22020. return ForOnTransformer;
  22021. }};
  22022. });
  22023. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js", [], function() {
  22024. "use strict";
  22025. var __moduleName = "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js";
  22026. var ComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js")).ComprehensionTransformer;
  22027. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js")).parseStatement;
  22028. var GeneratorComprehensionTransformer = function($__super) {
  22029. function GeneratorComprehensionTransformer() {
  22030. $traceurRuntime.superConstructor(GeneratorComprehensionTransformer).apply(this, arguments);
  22031. }
  22032. return ($traceurRuntime.createClass)(GeneratorComprehensionTransformer, {transformGeneratorComprehension: function(tree) {
  22033. var expression = this.transformAny(tree.expression);
  22034. var statement = parseStatement($traceurRuntime.getTemplateObject(["yield ", ""]), expression);
  22035. var isGenerator = true;
  22036. return this.transformComprehension(tree, statement, isGenerator);
  22037. }}, {}, $__super);
  22038. }(ComprehensionTransformer);
  22039. return {get GeneratorComprehensionTransformer() {
  22040. return GeneratorComprehensionTransformer;
  22041. }};
  22042. });
  22043. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/State.js", [], function() {
  22044. "use strict";
  22045. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/State.js";
  22046. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/State.js")),
  22047. createAssignStateStatement = $__1.createAssignStateStatement,
  22048. createBreakStatement = $__1.createBreakStatement,
  22049. createCaseClause = $__1.createCaseClause,
  22050. createNumberLiteral = $__1.createNumberLiteral;
  22051. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/State.js")).parseStatement;
  22052. var State = function() {
  22053. function State(id) {
  22054. this.id = id;
  22055. }
  22056. return ($traceurRuntime.createClass)(State, {
  22057. transformMachineState: function(enclosingFinally, machineEndState, reporter) {
  22058. return createCaseClause(createNumberLiteral(this.id), this.transform(enclosingFinally, machineEndState, reporter));
  22059. },
  22060. transformBreak: function(labelSet, breakState) {
  22061. return this;
  22062. },
  22063. transformBreakOrContinue: function(labelSet) {
  22064. var breakState = arguments[1];
  22065. var continueState = arguments[2];
  22066. return this;
  22067. }
  22068. }, {});
  22069. }();
  22070. State.START_STATE = 0;
  22071. State.INVALID_STATE = -1;
  22072. State.END_STATE = -2;
  22073. State.RETHROW_STATE = -3;
  22074. State.generateJump = function(enclosingFinally, fallThroughState) {
  22075. return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, fallThroughState), [createBreakStatement()]);
  22076. };
  22077. State.generateAssignState = function(enclosingFinally, fallThroughState) {
  22078. var assignState;
  22079. if (State.isFinallyExit(enclosingFinally, fallThroughState)) {
  22080. assignState = generateAssignStateOutOfFinally(enclosingFinally, fallThroughState);
  22081. } else {
  22082. assignState = [createAssignStateStatement(fallThroughState)];
  22083. }
  22084. return assignState;
  22085. };
  22086. State.isFinallyExit = function(enclosingFinally, destination) {
  22087. return !!enclosingFinally && enclosingFinally.tryStates.indexOf(destination) < 0;
  22088. };
  22089. function generateAssignStateOutOfFinally(enclosingFinally, destination) {
  22090. var finallyState = enclosingFinally.finallyState;
  22091. return [createAssignStateStatement(finallyState), parseStatement($traceurRuntime.getTemplateObject(["$ctx.finallyFallThrough = ", ""]), destination)];
  22092. }
  22093. State.replaceStateList = function(oldStates, oldState, newState) {
  22094. var states = [];
  22095. for (var i = 0; i < oldStates.length; i++) {
  22096. states.push(State.replaceStateId(oldStates[i], oldState, newState));
  22097. }
  22098. return states;
  22099. };
  22100. State.replaceStateId = function(current, oldState, newState) {
  22101. return current === oldState ? newState : current;
  22102. };
  22103. State.replaceAllStates = function(exceptionBlocks, oldState, newState) {
  22104. var result = [];
  22105. for (var i = 0; i < exceptionBlocks.length; i++) {
  22106. result.push(exceptionBlocks[i].replaceState(oldState, newState));
  22107. }
  22108. return result;
  22109. };
  22110. return {get State() {
  22111. return State;
  22112. }};
  22113. });
  22114. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/AwaitState.js", [], function() {
  22115. "use strict";
  22116. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/AwaitState.js";
  22117. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/AwaitState.js")).State;
  22118. var parseStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/AwaitState.js")).parseStatements;
  22119. var AwaitState = function($__super) {
  22120. function AwaitState(id, callbackState, expression) {
  22121. $traceurRuntime.superConstructor(AwaitState).call(this, id), this.callbackState = callbackState;
  22122. this.expression = expression;
  22123. }
  22124. return ($traceurRuntime.createClass)(AwaitState, {
  22125. replaceState: function(oldState, newState) {
  22126. return new AwaitState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.callbackState, oldState, newState), this.expression);
  22127. },
  22128. transform: function(enclosingFinally, machineEndState, reporter) {
  22129. var $__1;
  22130. var stateId,
  22131. statements;
  22132. if (State.isFinallyExit(enclosingFinally, this.callbackState)) {
  22133. stateId = enclosingFinally.finallyState;
  22134. statements = parseStatements($traceurRuntime.getTemplateObject(["$ctx.finallyFallThrough = ", ""]), this.callbackState);
  22135. } else {
  22136. stateId = this.callbackState;
  22137. statements = [];
  22138. }
  22139. ($__1 = statements).push.apply($__1, $traceurRuntime.spread(parseStatements($traceurRuntime.getTemplateObject(["Promise.resolve(", ").then(\n $ctx.createCallback(", "), $ctx.errback);\n return;"]), this.expression, stateId)));
  22140. return statements;
  22141. }
  22142. }, {}, $__super);
  22143. }(State);
  22144. return {get AwaitState() {
  22145. return AwaitState;
  22146. }};
  22147. });
  22148. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FallThroughState.js", [], function() {
  22149. "use strict";
  22150. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FallThroughState.js";
  22151. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FallThroughState.js")).State;
  22152. var FallThroughState = function($__super) {
  22153. function FallThroughState(id, fallThroughState, statements) {
  22154. $traceurRuntime.superConstructor(FallThroughState).call(this, id);
  22155. this.fallThroughState = fallThroughState;
  22156. this.statements = statements;
  22157. }
  22158. return ($traceurRuntime.createClass)(FallThroughState, {
  22159. replaceState: function(oldState, newState) {
  22160. return new FallThroughState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.statements);
  22161. },
  22162. transform: function(enclosingFinally, machineEndState, reporter) {
  22163. return $traceurRuntime.spread(this.statements, State.generateJump(enclosingFinally, this.fallThroughState));
  22164. }
  22165. }, {}, $__super);
  22166. }(State);
  22167. return {get FallThroughState() {
  22168. return FallThroughState;
  22169. }};
  22170. });
  22171. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/BreakState.js", [], function() {
  22172. "use strict";
  22173. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/BreakState.js";
  22174. var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/BreakState.js")).FallThroughState;
  22175. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/BreakState.js")).State;
  22176. var BreakState = function($__super) {
  22177. function BreakState(id, label) {
  22178. $traceurRuntime.superConstructor(BreakState).call(this, id);
  22179. this.label = label;
  22180. }
  22181. return ($traceurRuntime.createClass)(BreakState, {
  22182. replaceState: function(oldState, newState) {
  22183. return new BreakState(State.replaceStateId(this.id, oldState, newState), this.label);
  22184. },
  22185. transform: function(enclosingFinally, machineEndState, reporter) {
  22186. throw new Error('These should be removed before the transform step');
  22187. },
  22188. transformBreak: function(labelSet) {
  22189. var breakState = arguments[1];
  22190. if (this.label === null)
  22191. return new FallThroughState(this.id, breakState, []);
  22192. if (labelSet.has(this.label)) {
  22193. return new FallThroughState(this.id, labelSet.get(this.label).fallThroughState, []);
  22194. }
  22195. return this;
  22196. },
  22197. transformBreakOrContinue: function(labelSet) {
  22198. var breakState = arguments[1];
  22199. var continueState = arguments[2];
  22200. return this.transformBreak(labelSet, breakState);
  22201. }
  22202. }, {}, $__super);
  22203. }(State);
  22204. return {get BreakState() {
  22205. return BreakState;
  22206. }};
  22207. });
  22208. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ContinueState.js", [], function() {
  22209. "use strict";
  22210. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ContinueState.js";
  22211. var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/ContinueState.js")).FallThroughState;
  22212. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ContinueState.js")).State;
  22213. var ContinueState = function($__super) {
  22214. function ContinueState(id, label) {
  22215. $traceurRuntime.superConstructor(ContinueState).call(this, id);
  22216. this.label = label;
  22217. }
  22218. return ($traceurRuntime.createClass)(ContinueState, {
  22219. replaceState: function(oldState, newState) {
  22220. return new ContinueState(State.replaceStateId(this.id, oldState, newState), this.label);
  22221. },
  22222. transform: function(enclosingFinally, machineEndState, reporter) {
  22223. throw new Error('These should be removed before the transform step');
  22224. },
  22225. transformBreakOrContinue: function(labelSet) {
  22226. var breakState = arguments[1];
  22227. var continueState = arguments[2];
  22228. if (this.label === null)
  22229. return new FallThroughState(this.id, continueState, []);
  22230. if (labelSet.has(this.label)) {
  22231. return new FallThroughState(this.id, labelSet.get(this.label).continueState, []);
  22232. }
  22233. return this;
  22234. }
  22235. }, {}, $__super);
  22236. }(State);
  22237. return {get ContinueState() {
  22238. return ContinueState;
  22239. }};
  22240. });
  22241. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/TryState.js", [], function() {
  22242. "use strict";
  22243. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/TryState.js";
  22244. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/TryState.js")).State;
  22245. var Kind = {
  22246. CATCH: 'catch',
  22247. FINALLY: 'finally'
  22248. };
  22249. var TryState = function() {
  22250. function TryState(kind, tryStates, nestedTrys) {
  22251. this.kind = kind;
  22252. this.tryStates = tryStates;
  22253. this.nestedTrys = nestedTrys;
  22254. }
  22255. return ($traceurRuntime.createClass)(TryState, {
  22256. replaceAllStates: function(oldState, newState) {
  22257. return State.replaceStateList(this.tryStates, oldState, newState);
  22258. },
  22259. replaceNestedTrys: function(oldState, newState) {
  22260. var states = [];
  22261. for (var i = 0; i < this.nestedTrys.length; i++) {
  22262. states.push(this.nestedTrys[i].replaceState(oldState, newState));
  22263. }
  22264. return states;
  22265. }
  22266. }, {});
  22267. }();
  22268. TryState.Kind = Kind;
  22269. return {get TryState() {
  22270. return TryState;
  22271. }};
  22272. });
  22273. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/StateMachine.js", [], function() {
  22274. "use strict";
  22275. var __moduleName = "traceur@0.0.112/src/syntax/trees/StateMachine.js";
  22276. var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTree.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).ParseTree;
  22277. var STATE_MACHINE = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).STATE_MACHINE;
  22278. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../codegeneration/generator/State.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).State;
  22279. var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../codegeneration/generator/TryState.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).TryState;
  22280. function addCatchOrFinallyStates(kind, enclosingMap, tryStates) {
  22281. for (var i = 0; i < tryStates.length; i++) {
  22282. var tryState = tryStates[i];
  22283. if (tryState.kind === kind) {
  22284. for (var j = 0; j < tryState.tryStates.length; j++) {
  22285. var id = tryState.tryStates[j];
  22286. enclosingMap[id] = tryState;
  22287. }
  22288. }
  22289. addCatchOrFinallyStates(kind, enclosingMap, tryState.nestedTrys);
  22290. }
  22291. }
  22292. function addAllCatchStates(tryStates, catches) {
  22293. for (var i = 0; i < tryStates.length; i++) {
  22294. var tryState = tryStates[i];
  22295. if (tryState.kind === TryState.Kind.CATCH) {
  22296. catches.push(tryState);
  22297. }
  22298. addAllCatchStates(tryState.nestedTrys, catches);
  22299. }
  22300. }
  22301. var StateMachine = function($__super) {
  22302. function StateMachine(startState, fallThroughState, states, exceptionBlocks) {
  22303. $traceurRuntime.superConstructor(StateMachine).call(this, null);
  22304. this.startState = startState;
  22305. this.fallThroughState = fallThroughState;
  22306. this.states = states;
  22307. this.exceptionBlocks = exceptionBlocks;
  22308. }
  22309. return ($traceurRuntime.createClass)(StateMachine, {
  22310. get type() {
  22311. return STATE_MACHINE;
  22312. },
  22313. transform: function(transformer) {
  22314. return transformer.transformStateMachine(this);
  22315. },
  22316. visit: function(visitor) {
  22317. visitor.visitStateMachine(this);
  22318. },
  22319. getAllStateIDs: function() {
  22320. var result = [];
  22321. for (var i = 0; i < this.states.length; i++) {
  22322. result.push(this.states[i].id);
  22323. }
  22324. return result;
  22325. },
  22326. getEnclosingFinallyMap: function() {
  22327. var enclosingMap = Object.create(null);
  22328. addCatchOrFinallyStates(TryState.Kind.FINALLY, enclosingMap, this.exceptionBlocks);
  22329. return enclosingMap;
  22330. },
  22331. allCatchStates: function() {
  22332. var catches = [];
  22333. addAllCatchStates(this.exceptionBlocks, catches);
  22334. return catches;
  22335. },
  22336. replaceStateId: function(oldState, newState) {
  22337. return new StateMachine(State.replaceStateId(this.startState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), State.replaceAllStates(this.states, oldState, newState), State.replaceAllStates(this.exceptionBlocks, oldState, newState));
  22338. },
  22339. replaceStartState: function(newState) {
  22340. return this.replaceStateId(this.startState, newState);
  22341. },
  22342. replaceFallThroughState: function(newState) {
  22343. return this.replaceStateId(this.fallThroughState, newState);
  22344. },
  22345. append: function(nextMachine) {
  22346. var states = $traceurRuntime.spread(this.states);
  22347. for (var i = 0; i < nextMachine.states.length; i++) {
  22348. var otherState = nextMachine.states[i];
  22349. states.push(otherState.replaceState(nextMachine.startState, this.fallThroughState));
  22350. }
  22351. var exceptionBlocks = $traceurRuntime.spread(this.exceptionBlocks);
  22352. for (var i$__1 = 0; i$__1 < nextMachine.exceptionBlocks.length; i$__1++) {
  22353. var tryState = nextMachine.exceptionBlocks[i$__1];
  22354. exceptionBlocks.push(tryState.replaceState(nextMachine.startState, this.fallThroughState));
  22355. }
  22356. return new StateMachine(this.startState, nextMachine.fallThroughState, states, exceptionBlocks);
  22357. }
  22358. }, {}, $__super);
  22359. }(ParseTree);
  22360. return {get StateMachine() {
  22361. return StateMachine;
  22362. }};
  22363. });
  22364. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js", [], function() {
  22365. "use strict";
  22366. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js";
  22367. var BreakState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BreakState.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).BreakState;
  22368. var ContinueState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ContinueState.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).ContinueState;
  22369. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).ParseTreeTransformer;
  22370. var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).StateMachine;
  22371. function safeGetLabel(tree) {
  22372. return tree.name ? tree.name.value : null;
  22373. }
  22374. var BreakContinueTransformer = function($__super) {
  22375. function BreakContinueTransformer(stateAllocator) {
  22376. $traceurRuntime.superConstructor(BreakContinueTransformer).call(this);
  22377. this.transformBreaks_ = true;
  22378. this.stateAllocator_ = stateAllocator;
  22379. }
  22380. return ($traceurRuntime.createClass)(BreakContinueTransformer, {
  22381. allocateState_: function() {
  22382. return this.stateAllocator_.allocateState();
  22383. },
  22384. stateToStateMachine_: function(newState) {
  22385. var fallThroughState = this.allocateState_();
  22386. return new StateMachine(newState.id, fallThroughState, [newState], []);
  22387. },
  22388. transformBreakStatement: function(tree) {
  22389. return this.transformBreaks_ || tree.name ? this.stateToStateMachine_(new BreakState(this.allocateState_(), safeGetLabel(tree))) : tree;
  22390. },
  22391. transformContinueStatement: function(tree) {
  22392. return this.stateToStateMachine_(new ContinueState(this.allocateState_(), safeGetLabel(tree)));
  22393. },
  22394. transformDoWhileStatement: function(tree) {
  22395. return tree;
  22396. },
  22397. transformForOfStatement: function(tree) {
  22398. return tree;
  22399. },
  22400. transformForOnStatement: function(tree) {
  22401. return tree;
  22402. },
  22403. transformForStatement: function(tree) {
  22404. return tree;
  22405. },
  22406. transformFunctionDeclaration: function(tree) {
  22407. return tree;
  22408. },
  22409. transformFunctionExpression: function(tree) {
  22410. return tree;
  22411. },
  22412. transformStateMachine: function(tree) {
  22413. return tree;
  22414. },
  22415. transformSwitchStatement: function(tree) {
  22416. var oldState = this.transformBreaks_;
  22417. this.transformBreaks_ = false;
  22418. var result = $traceurRuntime.superGet(this, BreakContinueTransformer.prototype, "transformSwitchStatement").call(this, tree);
  22419. this.transformBreaks_ = oldState;
  22420. return result;
  22421. },
  22422. transformWhileStatement: function(tree) {
  22423. return tree;
  22424. }
  22425. }, {}, $__super);
  22426. }(ParseTreeTransformer);
  22427. return {get BreakContinueTransformer() {
  22428. return BreakContinueTransformer;
  22429. }};
  22430. });
  22431. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/CatchState.js", [], function() {
  22432. "use strict";
  22433. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/CatchState.js";
  22434. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/CatchState.js")).State;
  22435. var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/CatchState.js")).TryState;
  22436. var CatchState = function($__super) {
  22437. function CatchState(identifier, catchState, fallThroughState, allStates, nestedTrys) {
  22438. $traceurRuntime.superConstructor(CatchState).call(this, TryState.Kind.CATCH, allStates, nestedTrys);
  22439. this.identifier = identifier;
  22440. this.catchState = catchState;
  22441. this.fallThroughState = fallThroughState;
  22442. }
  22443. return ($traceurRuntime.createClass)(CatchState, {replaceState: function(oldState, newState) {
  22444. return new CatchState(this.identifier, State.replaceStateId(this.catchState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState));
  22445. }}, {}, $__super);
  22446. }(TryState);
  22447. return {get CatchState() {
  22448. return CatchState;
  22449. }};
  22450. });
  22451. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ConditionalState.js", [], function() {
  22452. "use strict";
  22453. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js";
  22454. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")).State;
  22455. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")),
  22456. createBlock = $__2.createBlock,
  22457. createIfStatement = $__2.createIfStatement;
  22458. var parseStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")).parseStatements;
  22459. var ConditionalState = function($__super) {
  22460. function ConditionalState(id, ifState, elseState, condition) {
  22461. $traceurRuntime.superConstructor(ConditionalState).call(this, id);
  22462. this.ifState = ifState;
  22463. this.elseState = elseState;
  22464. this.condition = condition;
  22465. }
  22466. return ($traceurRuntime.createClass)(ConditionalState, {
  22467. replaceState: function(oldState, newState) {
  22468. return new ConditionalState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.ifState, oldState, newState), State.replaceStateId(this.elseState, oldState, newState), this.condition);
  22469. },
  22470. transform: function(enclosingFinally, machineEndState, reporter) {
  22471. if (State.isFinallyExit(enclosingFinally, this.ifState) || State.isFinallyExit(enclosingFinally, this.elseState)) {
  22472. return [createIfStatement(this.condition, createBlock(State.generateJump(enclosingFinally, this.ifState)), createBlock(State.generateJump(enclosingFinally, this.elseState)))];
  22473. }
  22474. return parseStatements($traceurRuntime.getTemplateObject(["$ctx.state = (", ") ? ", " : ", ";\n break"]), this.condition, this.ifState, this.elseState);
  22475. }
  22476. }, {}, $__super);
  22477. }(State);
  22478. return {get ConditionalState() {
  22479. return ConditionalState;
  22480. }};
  22481. });
  22482. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js", [], function() {
  22483. "use strict";
  22484. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js";
  22485. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js")).State;
  22486. var FinallyFallThroughState = function($__super) {
  22487. function FinallyFallThroughState() {
  22488. $traceurRuntime.superConstructor(FinallyFallThroughState).apply(this, arguments);
  22489. }
  22490. return ($traceurRuntime.createClass)(FinallyFallThroughState, {
  22491. replaceState: function(oldState, newState) {
  22492. return new FinallyFallThroughState(State.replaceStateId(this.id, oldState, newState));
  22493. },
  22494. transformMachineState: function(enclosingFinally, machineEndState, reporter) {
  22495. return null;
  22496. },
  22497. transform: function(enclosingFinally, machineEndState, reporter) {
  22498. throw new Error('these are generated in addFinallyFallThroughDispatches');
  22499. }
  22500. }, {}, $__super);
  22501. }(State);
  22502. return {get FinallyFallThroughState() {
  22503. return FinallyFallThroughState;
  22504. }};
  22505. });
  22506. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FinallyState.js", [], function() {
  22507. "use strict";
  22508. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FinallyState.js";
  22509. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FinallyState.js")).State;
  22510. var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/FinallyState.js")).TryState;
  22511. var FinallyState = function($__super) {
  22512. function FinallyState(finallyState, fallThroughState, allStates, nestedTrys) {
  22513. $traceurRuntime.superConstructor(FinallyState).call(this, TryState.Kind.FINALLY, allStates, nestedTrys);
  22514. this.finallyState = finallyState;
  22515. this.fallThroughState = fallThroughState;
  22516. }
  22517. return ($traceurRuntime.createClass)(FinallyState, {replaceState: function(oldState, newState) {
  22518. return new FinallyState(State.replaceStateId(this.finallyState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState));
  22519. }}, {}, $__super);
  22520. }(TryState);
  22521. return {get FinallyState() {
  22522. return FinallyState;
  22523. }};
  22524. });
  22525. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/StateAllocator.js", [], function() {
  22526. "use strict";
  22527. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/StateAllocator.js";
  22528. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/StateAllocator.js")).State;
  22529. var StateAllocator = function() {
  22530. function StateAllocator() {
  22531. this.nextState_ = State.START_STATE + 1;
  22532. }
  22533. return ($traceurRuntime.createClass)(StateAllocator, {allocateState: function() {
  22534. return this.nextState_++;
  22535. }}, {});
  22536. }();
  22537. return {get StateAllocator() {
  22538. return StateAllocator;
  22539. }};
  22540. });
  22541. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/SwitchState.js", [], function() {
  22542. "use strict";
  22543. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/SwitchState.js";
  22544. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")),
  22545. CaseClause = $__2.CaseClause,
  22546. DefaultClause = $__2.DefaultClause,
  22547. SwitchStatement = $__2.SwitchStatement;
  22548. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")).State;
  22549. var createBreakStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")).createBreakStatement;
  22550. var SwitchClause = function() {
  22551. function SwitchClause(first, second) {
  22552. this.first = first;
  22553. this.second = second;
  22554. }
  22555. return ($traceurRuntime.createClass)(SwitchClause, {}, {});
  22556. }();
  22557. var SwitchState = function($__super) {
  22558. function SwitchState(id, expression, clauses) {
  22559. $traceurRuntime.superConstructor(SwitchState).call(this, id);
  22560. this.expression = expression;
  22561. this.clauses = clauses;
  22562. }
  22563. return ($traceurRuntime.createClass)(SwitchState, {
  22564. replaceState: function(oldState, newState) {
  22565. var clauses = this.clauses.map(function(clause) {
  22566. return new SwitchClause(clause.first, State.replaceStateId(clause.second, oldState, newState));
  22567. });
  22568. return new SwitchState(State.replaceStateId(this.id, oldState, newState), this.expression, clauses);
  22569. },
  22570. transform: function(enclosingFinally, machineEndState, reporter) {
  22571. var clauses = [];
  22572. for (var i = 0; i < this.clauses.length; i++) {
  22573. var clause = this.clauses[i];
  22574. if (clause.first === null) {
  22575. clauses.push(new DefaultClause(null, State.generateJump(enclosingFinally, clause.second)));
  22576. } else {
  22577. clauses.push(new CaseClause(null, clause.first, State.generateJump(enclosingFinally, clause.second)));
  22578. }
  22579. }
  22580. return [new SwitchStatement(null, this.expression, clauses), createBreakStatement()];
  22581. }
  22582. }, {}, $__super);
  22583. }(State);
  22584. return {
  22585. get SwitchClause() {
  22586. return SwitchClause;
  22587. },
  22588. get SwitchState() {
  22589. return SwitchState;
  22590. }
  22591. };
  22592. });
  22593. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js", [], function() {
  22594. "use strict";
  22595. var __moduleName = "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js";
  22596. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")),
  22597. AnonBlock = $__1.AnonBlock,
  22598. Catch = $__1.Catch,
  22599. FunctionBody = $__1.FunctionBody,
  22600. ForInStatement = $__1.ForInStatement,
  22601. ForOfStatement = $__1.ForOfStatement,
  22602. ForStatement = $__1.ForStatement,
  22603. VariableDeclarationList = $__1.VariableDeclarationList,
  22604. VariableStatement = $__1.VariableStatement;
  22605. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")),
  22606. OBJECT_PATTERN = $__2.OBJECT_PATTERN,
  22607. VARIABLE_DECLARATION_LIST = $__2.VARIABLE_DECLARATION_LIST;
  22608. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).ParseTreeTransformer;
  22609. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).StringSet;
  22610. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).VAR;
  22611. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")),
  22612. createAssignmentExpression = $__6.createAssignmentExpression,
  22613. createCommaExpression = $__6.createCommaExpression,
  22614. createExpressionStatement = $__6.createExpressionStatement,
  22615. id = $__6.createIdentifierExpression,
  22616. createParenExpression = $__6.createParenExpression,
  22617. createVariableDeclaration = $__6.createVariableDeclaration;
  22618. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).prependStatements;
  22619. var HoistVariablesTransformer = function($__super) {
  22620. function HoistVariablesTransformer() {
  22621. var shouldHoistFunctions = arguments[0] !== (void 0) ? arguments[0] : false;
  22622. $traceurRuntime.superConstructor(HoistVariablesTransformer).call(this);
  22623. this.hoistedFunctions_ = [];
  22624. this.hoistedVariables_ = new StringSet();
  22625. this.keepBindingIdentifiers_ = false;
  22626. this.inBlockOrFor_ = false;
  22627. this.shouldHoistFunctions_ = shouldHoistFunctions;
  22628. }
  22629. return ($traceurRuntime.createClass)(HoistVariablesTransformer, {
  22630. transformFunctionBody: function(tree) {
  22631. var statements = this.transformList(tree.statements);
  22632. if (statements === tree.statements)
  22633. return tree;
  22634. statements = this.prependVariables(statements);
  22635. statements = this.prependFunctions(statements);
  22636. return new FunctionBody(tree.location, statements);
  22637. },
  22638. addVariable: function(name) {
  22639. this.hoistedVariables_.add(name);
  22640. },
  22641. addFunctionDeclaration: function(tree) {
  22642. this.hoistedFunctions_.push(tree);
  22643. },
  22644. hasVariables: function() {
  22645. return !this.hoistedVariables_.isEmpty();
  22646. },
  22647. hasFunctions: function() {
  22648. return this.hoistedFunctions_.length > 0;
  22649. },
  22650. getVariableNames: function() {
  22651. return this.hoistedVariables_.valuesAsArray();
  22652. },
  22653. getVariableStatement: function() {
  22654. if (!this.hasVariables())
  22655. return new AnonBlock(null, []);
  22656. var declarations = this.getVariableNames().map(function(name) {
  22657. return createVariableDeclaration(name, null);
  22658. });
  22659. return new VariableStatement(null, new VariableDeclarationList(null, VAR, declarations));
  22660. },
  22661. getFunctions: function() {
  22662. return this.hoistedFunctions_;
  22663. },
  22664. prependVariables: function(statements) {
  22665. if (!this.hasVariables())
  22666. return statements;
  22667. return prependStatements(statements, this.getVariableStatement());
  22668. },
  22669. prependFunctions: function(statements) {
  22670. if (!this.hasFunctions())
  22671. return statements;
  22672. return prependStatements(statements, this.getFunctionDeclarations());
  22673. },
  22674. transformVariableStatement: function(tree) {
  22675. var declarations = this.transformAny(tree.declarations);
  22676. if (declarations === tree.declarations)
  22677. return tree;
  22678. if (declarations === null)
  22679. return new AnonBlock(null, []);
  22680. if (declarations.type === VARIABLE_DECLARATION_LIST)
  22681. return new VariableStatement(tree.location, declarations);
  22682. return createExpressionStatement(declarations);
  22683. },
  22684. transformVariableDeclaration: function(tree) {
  22685. var lvalue = this.transformAny(tree.lvalue);
  22686. var initializer = this.transformAny(tree.initializer);
  22687. if (initializer) {
  22688. var expression = createAssignmentExpression(lvalue, initializer);
  22689. if (lvalue.type === OBJECT_PATTERN)
  22690. expression = createParenExpression(expression);
  22691. return expression;
  22692. }
  22693. return null;
  22694. },
  22695. transformObjectPattern: function(tree) {
  22696. var keepBindingIdentifiers = this.keepBindingIdentifiers_;
  22697. this.keepBindingIdentifiers_ = true;
  22698. var transformed = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformObjectPattern").call(this, tree);
  22699. this.keepBindingIdentifiers_ = keepBindingIdentifiers;
  22700. return transformed;
  22701. },
  22702. transformArrayPattern: function(tree) {
  22703. var keepBindingIdentifiers = this.keepBindingIdentifiers_;
  22704. this.keepBindingIdentifiers_ = true;
  22705. var transformed = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformArrayPattern").call(this, tree);
  22706. this.keepBindingIdentifiers_ = keepBindingIdentifiers;
  22707. return transformed;
  22708. },
  22709. transformBindingIdentifier: function(tree) {
  22710. var idToken = tree.identifierToken;
  22711. this.addVariable(idToken.value);
  22712. if (this.keepBindingIdentifiers_)
  22713. return tree;
  22714. return id(idToken);
  22715. },
  22716. transformVariableDeclarationList: function(tree) {
  22717. if (tree.declarationType === VAR || !this.inBlockOrFor_) {
  22718. var expressions = this.transformList(tree.declarations);
  22719. expressions = expressions.filter(function(tree) {
  22720. return tree;
  22721. });
  22722. if (expressions.length === 0)
  22723. return null;
  22724. if (expressions.length === 1)
  22725. return expressions[0];
  22726. return createCommaExpression(expressions);
  22727. }
  22728. return tree;
  22729. },
  22730. transformCatch: function(tree) {
  22731. var catchBody = this.transformAny(tree.catchBody);
  22732. if (catchBody === tree.catchBody)
  22733. return tree;
  22734. return new Catch(tree.location, tree.binding, catchBody);
  22735. },
  22736. transformForInStatement: function(tree) {
  22737. return this.transformLoop_(tree, ForInStatement);
  22738. },
  22739. transformForOfStatement: function(tree) {
  22740. return this.transformLoop_(tree, ForOfStatement);
  22741. },
  22742. transformForOnStatement: function(tree) {
  22743. return this.transformLoop_(tree, ForOfStatement);
  22744. },
  22745. transformLoop_: function(tree, ctor) {
  22746. var initializer = this.transformLoopIninitaliser_(tree.initializer);
  22747. var collection = this.transformAny(tree.collection);
  22748. var body = this.transformAny(tree.body);
  22749. if (initializer === tree.initializer && collection === tree.collection && body === tree.body) {
  22750. return tree;
  22751. }
  22752. return new ctor(tree.location, initializer, collection, body);
  22753. },
  22754. transformLoopIninitaliser_: function(tree) {
  22755. if (tree.type !== VARIABLE_DECLARATION_LIST || tree.declarationType !== VAR)
  22756. return tree;
  22757. return this.transformAny(tree.declarations[0].lvalue);
  22758. },
  22759. transformForStatement: function(tree) {
  22760. var inBlockOrFor = this.inBlockOrFor_;
  22761. this.inBlockOrFor_ = true;
  22762. var initializer = this.transformAny(tree.initializer);
  22763. this.inBlockOrFor_ = inBlockOrFor;
  22764. var condition = this.transformAny(tree.condition);
  22765. var increment = this.transformAny(tree.increment);
  22766. var body = this.transformAny(tree.body);
  22767. if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {
  22768. return tree;
  22769. }
  22770. return new ForStatement(tree.location, initializer, condition, increment, body);
  22771. },
  22772. transformBlock: function(tree) {
  22773. var inBlockOrFor = this.inBlockOrFor_;
  22774. this.inBlockOrFor_ = true;
  22775. tree = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformBlock").call(this, tree);
  22776. this.inBlockOrFor_ = inBlockOrFor;
  22777. return tree;
  22778. },
  22779. addMachineVariable: function(name) {
  22780. this.machineVariables_[name] = true;
  22781. },
  22782. transformClassDeclaration: function(tree) {
  22783. return tree;
  22784. },
  22785. transformClassExpression: function(tree) {
  22786. return tree;
  22787. },
  22788. transformFunctionDeclaration: function(tree) {
  22789. if (this.shouldHoistFunctions_) {
  22790. this.addFunctionDeclaration(tree);
  22791. return new AnonBlock(null, []);
  22792. }
  22793. return tree;
  22794. },
  22795. transformFunctionExpression: function(tree) {
  22796. return tree;
  22797. },
  22798. transformGetAccessor: function(tree) {
  22799. return tree;
  22800. },
  22801. transformSetAccessor: function(tree) {
  22802. return tree;
  22803. },
  22804. transformMethod: function(tree) {
  22805. return tree;
  22806. },
  22807. transformArrowFunction: function(tree) {
  22808. return tree;
  22809. },
  22810. transformComprehensionFor: function(tree) {
  22811. return tree;
  22812. }
  22813. }, {}, $__super);
  22814. }(ParseTreeTransformer);
  22815. var $__default = HoistVariablesTransformer;
  22816. return {get default() {
  22817. return $__default;
  22818. }};
  22819. });
  22820. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js", [], function() {
  22821. "use strict";
  22822. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js";
  22823. var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).AlphaRenamer;
  22824. var BreakContinueTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BreakContinueTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).BreakContinueTransformer;
  22825. var $__19 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")),
  22826. BLOCK = $__19.BLOCK,
  22827. CASE_CLAUSE = $__19.CASE_CLAUSE,
  22828. CONDITIONAL_EXPRESSION = $__19.CONDITIONAL_EXPRESSION,
  22829. EXPRESSION_STATEMENT = $__19.EXPRESSION_STATEMENT,
  22830. PAREN_EXPRESSION = $__19.PAREN_EXPRESSION,
  22831. STATE_MACHINE = $__19.STATE_MACHINE;
  22832. var $__20 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")),
  22833. AnonBlock = $__20.AnonBlock,
  22834. Block = $__20.Block,
  22835. CaseClause = $__20.CaseClause,
  22836. IfStatement = $__20.IfStatement,
  22837. SwitchStatement = $__20.SwitchStatement;
  22838. var CatchState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CatchState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).CatchState;
  22839. var ConditionalState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ConditionalState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ConditionalState;
  22840. var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ExplodeExpressionTransformer;
  22841. var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FallThroughState;
  22842. var FinallyFallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FinallyFallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FinallyFallThroughState;
  22843. var FinallyState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FinallyState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FinallyState;
  22844. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FindInFunctionScope;
  22845. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ParseTreeTransformer;
  22846. var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringMap.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StringMap;
  22847. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).TempVarTransformer;
  22848. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).assert;
  22849. var $__32 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")),
  22850. parseExpression = $__32.parseExpression,
  22851. parseStatement = $__32.parseStatement,
  22852. parseStatements = $__32.parseStatements;
  22853. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).State;
  22854. var StateAllocator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StateAllocator.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StateAllocator;
  22855. var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StateMachine;
  22856. var $__36 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SwitchState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")),
  22857. SwitchClause = $__36.SwitchClause,
  22858. SwitchState = $__36.SwitchState;
  22859. var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).TryState;
  22860. var $__38 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")),
  22861. createAssignStateStatement = $__38.createAssignStateStatement,
  22862. createBreakStatement = $__38.createBreakStatement,
  22863. createCaseClause = $__38.createCaseClause,
  22864. createDefaultClause = $__38.createDefaultClause,
  22865. createExpressionStatement = $__38.createExpressionStatement,
  22866. createFunctionBody = $__38.createFunctionBody,
  22867. id = $__38.createIdentifierExpression,
  22868. createMemberExpression = $__38.createMemberExpression,
  22869. createNumberLiteral = $__38.createNumberLiteral,
  22870. createSwitchStatement = $__38.createSwitchStatement;
  22871. var HoistVariablesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../HoistVariablesTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).default;
  22872. var LabelState = function() {
  22873. function LabelState(name, continueState, fallThroughState) {
  22874. this.name = name;
  22875. this.continueState = continueState;
  22876. this.fallThroughState = fallThroughState;
  22877. }
  22878. return ($traceurRuntime.createClass)(LabelState, {}, {});
  22879. }();
  22880. var NeedsStateMachine = function($__super) {
  22881. function NeedsStateMachine() {
  22882. $traceurRuntime.superConstructor(NeedsStateMachine).apply(this, arguments);
  22883. }
  22884. return ($traceurRuntime.createClass)(NeedsStateMachine, {
  22885. visitBreakStatement: function(tree) {
  22886. this.found = true;
  22887. },
  22888. visitContinueStatement: function(tree) {
  22889. this.found = true;
  22890. },
  22891. visitStateMachine: function(tree) {
  22892. this.found = true;
  22893. },
  22894. visitYieldExpression: function(tee) {
  22895. this.found = true;
  22896. }
  22897. }, {}, $__super);
  22898. }(FindInFunctionScope);
  22899. function needsStateMachine(tree) {
  22900. var visitor = new NeedsStateMachine();
  22901. visitor.visitAny(tree);
  22902. return visitor.found;
  22903. }
  22904. var HoistVariables = function($__super) {
  22905. function HoistVariables() {
  22906. $traceurRuntime.superConstructor(HoistVariables).call(this, true);
  22907. }
  22908. return ($traceurRuntime.createClass)(HoistVariables, {
  22909. prependVariables: function(statements) {
  22910. return statements;
  22911. },
  22912. prependFunctions: function(statements) {
  22913. return statements;
  22914. }
  22915. }, {}, $__super);
  22916. }(HoistVariablesTransformer);
  22917. var CPSTransformer = function($__super) {
  22918. function CPSTransformer(identifierGenerator, reporter, options) {
  22919. $traceurRuntime.superConstructor(CPSTransformer).call(this, identifierGenerator, reporter, options);
  22920. this.stateAllocator_ = new StateAllocator();
  22921. this.labelSet_ = new StringMap();
  22922. this.currentLabel_ = null;
  22923. this.hoistVariablesTransformer_ = new HoistVariables();
  22924. }
  22925. return ($traceurRuntime.createClass)(CPSTransformer, {
  22926. expressionNeedsStateMachine: function(tree) {
  22927. return false;
  22928. },
  22929. allocateState: function() {
  22930. return this.stateAllocator_.allocateState();
  22931. },
  22932. transformBlock: function(tree) {
  22933. var labels = this.getLabels_();
  22934. var label = this.clearCurrentLabel_();
  22935. var transformedTree = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformBlock").call(this, tree);
  22936. var machine = this.transformStatementList_(transformedTree.statements);
  22937. if (machine === null)
  22938. return transformedTree;
  22939. if (label) {
  22940. var states = [];
  22941. for (var i = 0; i < machine.states.length; i++) {
  22942. var state = machine.states[i];
  22943. states.push(state.transformBreakOrContinue(labels));
  22944. }
  22945. machine = new StateMachine(machine.startState, machine.fallThroughState, states, machine.exceptionBlocks);
  22946. }
  22947. return machine;
  22948. },
  22949. transformFunctionBody: function(tree) {
  22950. this.pushTempScope();
  22951. var oldLabels = this.clearLabels_();
  22952. var transformedTree = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformFunctionBody").call(this, tree);
  22953. var machine = this.transformStatementList_(transformedTree.statements);
  22954. this.restoreLabels_(oldLabels);
  22955. this.popTempScope();
  22956. return machine === null ? transformedTree : machine;
  22957. },
  22958. transformStatementList_: function(trees) {
  22959. var groups = [];
  22960. var newMachine;
  22961. for (var i = 0; i < trees.length; i++) {
  22962. if (trees[i].type === STATE_MACHINE) {
  22963. groups.push(trees[i]);
  22964. } else if (needsStateMachine(trees[i])) {
  22965. newMachine = this.ensureTransformed_(trees[i]);
  22966. groups.push(newMachine);
  22967. } else {
  22968. var last = groups[groups.length - 1];
  22969. if (!(last instanceof Array))
  22970. groups.push(last = []);
  22971. last.push(trees[i]);
  22972. }
  22973. }
  22974. if (groups.length === 1 && groups[0] instanceof Array)
  22975. return null;
  22976. var machine = null;
  22977. for (var i$__11 = 0; i$__11 < groups.length; i$__11++) {
  22978. if (groups[i$__11] instanceof Array) {
  22979. newMachine = this.statementsToStateMachine_(groups[i$__11]);
  22980. } else {
  22981. newMachine = groups[i$__11];
  22982. }
  22983. if (i$__11 === 0)
  22984. machine = newMachine;
  22985. else
  22986. machine = machine.append(newMachine);
  22987. }
  22988. return machine;
  22989. },
  22990. needsStateMachine_: function(statements) {
  22991. if (statements instanceof Array) {
  22992. for (var i = 0; i < statements.length; i++) {
  22993. if (needsStateMachine(statements[i]))
  22994. return true;
  22995. }
  22996. return false;
  22997. }
  22998. assert(statements instanceof SwitchStatement);
  22999. return needsStateMachine(statements);
  23000. },
  23001. transformCaseClause: function(tree) {
  23002. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformCaseClause").call(this, tree);
  23003. var machine = this.transformStatementList_(result.statements);
  23004. return machine === null ? result : new CaseClause(null, result.expression, [machine]);
  23005. },
  23006. transformDoWhileStatement: function(tree) {
  23007. var $__8;
  23008. var $__6,
  23009. $__7;
  23010. var labels = this.getLabels_();
  23011. var label = this.clearCurrentLabel_();
  23012. var machine,
  23013. condition,
  23014. body;
  23015. if (this.expressionNeedsStateMachine(tree.condition)) {
  23016. (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6));
  23017. body = this.transformAny(tree.body);
  23018. } else {
  23019. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformDoWhileStatement").call(this, tree);
  23020. (($__7 = result, condition = $__7.condition, body = $__7.body, $__7));
  23021. if (body.type !== STATE_MACHINE)
  23022. return result;
  23023. }
  23024. var loopBodyMachine = this.ensureTransformed_(body);
  23025. var startState = loopBodyMachine.startState;
  23026. var conditionState = loopBodyMachine.fallThroughState;
  23027. var fallThroughState = this.allocateState();
  23028. var states = [];
  23029. this.addLoopBodyStates_(loopBodyMachine, conditionState, fallThroughState, labels, states);
  23030. if (machine) {
  23031. machine = machine.replaceStartState(conditionState);
  23032. conditionState = machine.fallThroughState;
  23033. ($__8 = states).push.apply($__8, $traceurRuntime.spread(machine.states));
  23034. }
  23035. states.push(new ConditionalState(conditionState, startState, fallThroughState, condition));
  23036. machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks);
  23037. if (label)
  23038. machine = machine.replaceStateId(conditionState, label.continueState);
  23039. return machine;
  23040. },
  23041. addLoopBodyStates_: function(loopBodyMachine, continueState, breakState, labels, states) {
  23042. for (var i = 0; i < loopBodyMachine.states.length; i++) {
  23043. var state = loopBodyMachine.states[i];
  23044. states.push(state.transformBreakOrContinue(labels, breakState, continueState));
  23045. }
  23046. },
  23047. transformForStatement: function(tree) {
  23048. var $__8,
  23049. $__9,
  23050. $__10;
  23051. var labels = this.getLabels_();
  23052. var label = this.clearCurrentLabel_();
  23053. var tmp;
  23054. var initializer = null,
  23055. initializerMachine;
  23056. if (tree.initializer) {
  23057. if (this.expressionNeedsStateMachine(tree.initializer)) {
  23058. tmp = this.expressionToStateMachine(tree.initializer);
  23059. initializer = tmp.expression;
  23060. initializerMachine = tmp.machine;
  23061. } else {
  23062. initializer = this.transformAny(tree.initializer);
  23063. }
  23064. }
  23065. var condition = null,
  23066. conditionMachine;
  23067. if (tree.condition) {
  23068. if (this.expressionNeedsStateMachine(tree.condition)) {
  23069. tmp = this.expressionToStateMachine(tree.condition);
  23070. condition = tmp.expression;
  23071. conditionMachine = tmp.machine;
  23072. } else {
  23073. condition = this.transformAny(tree.condition);
  23074. }
  23075. }
  23076. var increment = null,
  23077. incrementMachine;
  23078. if (tree.increment) {
  23079. if (this.expressionNeedsStateMachine(tree.increment)) {
  23080. tmp = this.expressionToStateMachine(tree.increment);
  23081. increment = tmp.expression;
  23082. incrementMachine = tmp.machine;
  23083. } else {
  23084. increment = this.transformAny(tree.increment);
  23085. }
  23086. }
  23087. var body = this.transformAny(tree.body);
  23088. if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) {
  23089. return tree;
  23090. }
  23091. if (!initializerMachine && !conditionMachine && !incrementMachine && body.type !== STATE_MACHINE) {
  23092. return new ForStatement(tree.location, initializer, condition, increment, body);
  23093. }
  23094. var loopBodyMachine = this.ensureTransformed_(body);
  23095. var bodyFallThroughId = loopBodyMachine.fallThroughState;
  23096. var fallThroughId = this.allocateState();
  23097. var startId;
  23098. var initializerStartId = initializer ? this.allocateState() : State.INVALID_STATE;
  23099. var conditionStartId = increment ? this.allocateState() : bodyFallThroughId;
  23100. var loopStartId = loopBodyMachine.startState;
  23101. var incrementStartId = bodyFallThroughId;
  23102. var states = [];
  23103. if (initializer) {
  23104. startId = initializerStartId;
  23105. var initialiserFallThroughId;
  23106. if (condition)
  23107. initialiserFallThroughId = conditionStartId;
  23108. else
  23109. initialiserFallThroughId = loopStartId;
  23110. var tmpId = initializerStartId;
  23111. if (initializerMachine) {
  23112. initializerMachine = initializerMachine.replaceStartState(initializerStartId);
  23113. tmpId = initializerMachine.fallThroughState;
  23114. ($__8 = states).push.apply($__8, $traceurRuntime.spread(initializerMachine.states));
  23115. }
  23116. states.push(new FallThroughState(tmpId, initialiserFallThroughId, [createExpressionStatement(initializer)]));
  23117. }
  23118. if (condition) {
  23119. if (!initializer)
  23120. startId = conditionStartId;
  23121. var tmpId$__12 = conditionStartId;
  23122. if (conditionMachine) {
  23123. conditionMachine = conditionMachine.replaceStartState(conditionStartId);
  23124. tmpId$__12 = conditionMachine.fallThroughState;
  23125. ($__9 = states).push.apply($__9, $traceurRuntime.spread(conditionMachine.states));
  23126. }
  23127. states.push(new ConditionalState(tmpId$__12, loopStartId, fallThroughId, condition));
  23128. }
  23129. if (increment) {
  23130. var incrementFallThroughId;
  23131. if (condition)
  23132. incrementFallThroughId = conditionStartId;
  23133. else
  23134. incrementFallThroughId = loopStartId;
  23135. var tmpId$__13 = incrementStartId;
  23136. if (incrementMachine) {
  23137. incrementMachine = incrementMachine.replaceStartState(incrementStartId);
  23138. tmpId$__13 = incrementMachine.fallThroughState;
  23139. ($__10 = states).push.apply($__10, $traceurRuntime.spread(incrementMachine.states));
  23140. }
  23141. states.push(new FallThroughState(tmpId$__13, incrementFallThroughId, [createExpressionStatement(increment)]));
  23142. }
  23143. if (!initializer && !condition)
  23144. startId = loopStartId;
  23145. var continueId;
  23146. if (increment)
  23147. continueId = incrementStartId;
  23148. else if (condition)
  23149. continueId = conditionStartId;
  23150. else
  23151. continueId = loopStartId;
  23152. if (!increment && !condition) {
  23153. loopBodyMachine = loopBodyMachine.replaceFallThroughState(loopBodyMachine.startState);
  23154. }
  23155. this.addLoopBodyStates_(loopBodyMachine, continueId, fallThroughId, labels, states);
  23156. var machine = new StateMachine(startId, fallThroughId, states, loopBodyMachine.exceptionBlocks);
  23157. if (label)
  23158. machine = machine.replaceStateId(continueId, label.continueState);
  23159. return machine;
  23160. },
  23161. transformForInStatement: function(tree) {
  23162. return tree;
  23163. },
  23164. transformForOfStatement: function(tree) {
  23165. throw new Error('for of statements should be transformed before this pass');
  23166. },
  23167. transformIfStatement: function(tree) {
  23168. var $__8,
  23169. $__9,
  23170. $__10;
  23171. var $__6,
  23172. $__7;
  23173. var machine,
  23174. condition,
  23175. ifClause,
  23176. elseClause;
  23177. if (this.expressionNeedsStateMachine(tree.condition)) {
  23178. (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6));
  23179. ifClause = this.transformAny(tree.ifClause);
  23180. elseClause = this.transformAny(tree.elseClause);
  23181. } else {
  23182. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformIfStatement").call(this, tree);
  23183. (($__7 = result, condition = $__7.condition, ifClause = $__7.ifClause, elseClause = $__7.elseClause, $__7));
  23184. if (ifClause.type !== STATE_MACHINE && (elseClause === null || elseClause.type !== STATE_MACHINE)) {
  23185. return result;
  23186. }
  23187. }
  23188. ifClause = this.ensureTransformed_(ifClause);
  23189. elseClause = this.ensureTransformed_(elseClause);
  23190. var startState = this.allocateState();
  23191. var fallThroughState = ifClause.fallThroughState;
  23192. var ifState = ifClause.startState;
  23193. var elseState = elseClause === null ? fallThroughState : elseClause.startState;
  23194. var states = [];
  23195. var exceptionBlocks = [];
  23196. states.push(new ConditionalState(startState, ifState, elseState, condition));
  23197. ($__8 = states).push.apply($__8, $traceurRuntime.spread(ifClause.states));
  23198. ($__9 = exceptionBlocks).push.apply($__9, $traceurRuntime.spread(ifClause.exceptionBlocks));
  23199. if (elseClause !== null) {
  23200. this.replaceAndAddStates_(elseClause.states, elseClause.fallThroughState, fallThroughState, states);
  23201. ($__10 = exceptionBlocks).push.apply($__10, $traceurRuntime.spread(State.replaceAllStates(elseClause.exceptionBlocks, elseClause.fallThroughState, fallThroughState)));
  23202. }
  23203. var ifMachine = new StateMachine(startState, fallThroughState, states, exceptionBlocks);
  23204. if (machine)
  23205. ifMachine = machine.append(ifMachine);
  23206. return ifMachine;
  23207. },
  23208. removeEmptyStates: function(oldStates) {
  23209. var emptyStates = [],
  23210. newStates = [];
  23211. for (var i = 0; i < oldStates.length; i++) {
  23212. if (oldStates[i] instanceof FallThroughState && oldStates[i].statements.length === 0) {
  23213. emptyStates.push(oldStates[i]);
  23214. } else {
  23215. newStates.push(oldStates[i]);
  23216. }
  23217. }
  23218. for (var i$__14 = 0; i$__14 < newStates.length; i$__14++) {
  23219. newStates[i$__14] = emptyStates.reduce(function(state, $__6) {
  23220. var $__7 = $__6,
  23221. id = $__7.id,
  23222. fallThroughState = $__7.fallThroughState;
  23223. return state.replaceState(id, fallThroughState);
  23224. }, newStates[i$__14]);
  23225. }
  23226. return newStates;
  23227. },
  23228. replaceAndAddStates_: function(oldStates, oldState, newState, newStates) {
  23229. for (var i = 0; i < oldStates.length; i++) {
  23230. newStates.push(oldStates[i].replaceState(oldState, newState));
  23231. }
  23232. },
  23233. transformLabelledStatement: function(tree) {
  23234. var startState = this.allocateState();
  23235. var continueState = this.allocateState();
  23236. var fallThroughState = this.allocateState();
  23237. var label = new LabelState(tree.name.value, continueState, fallThroughState);
  23238. var oldLabels = this.addLabel_(label);
  23239. this.currentLabel_ = label;
  23240. var result = this.transformAny(tree.statement);
  23241. if (result === tree.statement) {
  23242. result = tree;
  23243. } else if (result.type === STATE_MACHINE) {
  23244. result = result.replaceStartState(startState);
  23245. result = result.replaceFallThroughState(fallThroughState);
  23246. }
  23247. this.restoreLabels_(oldLabels);
  23248. return result;
  23249. },
  23250. getLabels_: function() {
  23251. return this.labelSet_;
  23252. },
  23253. restoreLabels_: function(oldLabels) {
  23254. this.labelSet_ = oldLabels;
  23255. },
  23256. addLabel_: function(label) {
  23257. var $__5 = this;
  23258. var oldLabels = this.labelSet_;
  23259. var labelSet = new StringMap();
  23260. this.labelSet_.forEach(function(k) {
  23261. return labelSet[k] = $__5.labelSet_[k];
  23262. });
  23263. labelSet.set(label.name, label);
  23264. this.labelSet_ = labelSet;
  23265. return oldLabels;
  23266. },
  23267. clearLabels_: function() {
  23268. var result = this.labelSet_;
  23269. this.labelSet_ = new StringMap();
  23270. return result;
  23271. },
  23272. clearCurrentLabel_: function() {
  23273. var result = this.currentLabel_;
  23274. this.currentLabel_ = null;
  23275. return result;
  23276. },
  23277. transformSwitchStatement: function(tree) {
  23278. var $__6,
  23279. $__7;
  23280. var labels = this.getLabels_();
  23281. var expression,
  23282. machine,
  23283. caseClauses;
  23284. if (this.expressionNeedsStateMachine(tree.expression)) {
  23285. (($__6 = this.expressionToStateMachine(tree.expression), expression = $__6.expression, machine = $__6.machine, $__6));
  23286. caseClauses = this.transformList(tree.caseClauses);
  23287. } else {
  23288. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformSwitchStatement").call(this, tree);
  23289. if (!needsStateMachine(result))
  23290. return result;
  23291. (($__7 = result, expression = $__7.expression, caseClauses = $__7.caseClauses, $__7));
  23292. }
  23293. var startState = this.allocateState();
  23294. var fallThroughState = this.allocateState();
  23295. var nextState = fallThroughState;
  23296. var states = [];
  23297. var clauses = [];
  23298. var tryStates = [];
  23299. var hasDefault = false;
  23300. for (var index = caseClauses.length - 1; index >= 0; index--) {
  23301. var clause = caseClauses[index];
  23302. if (clause.type === CASE_CLAUSE) {
  23303. var caseClause = clause;
  23304. nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, caseClause.statements, states, tryStates);
  23305. clauses.push(new SwitchClause(caseClause.expression, nextState));
  23306. } else {
  23307. hasDefault = true;
  23308. var defaultClause = clause;
  23309. nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, defaultClause.statements, states, tryStates);
  23310. clauses.push(new SwitchClause(null, nextState));
  23311. }
  23312. }
  23313. if (!hasDefault) {
  23314. clauses.push(new SwitchClause(null, fallThroughState));
  23315. }
  23316. states.push(new SwitchState(startState, expression, clauses.reverse()));
  23317. var switchMachine = new StateMachine(startState, fallThroughState, states.reverse(), tryStates);
  23318. if (machine)
  23319. switchMachine = machine.append(switchMachine);
  23320. return switchMachine;
  23321. },
  23322. addSwitchClauseStates_: function(nextState, fallThroughState, labels, statements, states, tryStates) {
  23323. var $__8;
  23324. var machine = this.ensureTransformedList_(statements);
  23325. for (var i = 0; i < machine.states.length; i++) {
  23326. var state = machine.states[i];
  23327. var transformedState = state.transformBreak(labels, fallThroughState);
  23328. states.push(transformedState.replaceState(machine.fallThroughState, nextState));
  23329. }
  23330. ($__8 = tryStates).push.apply($__8, $traceurRuntime.spread(machine.exceptionBlocks));
  23331. return machine.startState;
  23332. },
  23333. transformTryStatement: function(tree) {
  23334. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformTryStatement").call(this, tree);
  23335. var $__6 = result,
  23336. body = $__6.body,
  23337. catchBlock = $__6.catchBlock,
  23338. finallyBlock = $__6.finallyBlock;
  23339. if (body.type !== STATE_MACHINE && (catchBlock === null || catchBlock.catchBody.type !== STATE_MACHINE) && (finallyBlock === null || finallyBlock.block.type !== STATE_MACHINE)) {
  23340. return result;
  23341. }
  23342. var outerCatchState = this.allocateState();
  23343. var outerFinallyState = this.allocateState();
  23344. var pushTryState = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.pushTry(\n ", ",\n ", ");"]), (catchBlock && outerCatchState), (finallyBlock && outerFinallyState)));
  23345. var tryMachine = this.ensureTransformed_(body);
  23346. tryMachine = pushTryState.append(tryMachine);
  23347. if (catchBlock !== null) {
  23348. var popTry = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.popTry();"])));
  23349. tryMachine = tryMachine.append(popTry);
  23350. var exceptionName = catchBlock.binding.identifierToken.value;
  23351. var catchMachine = this.ensureTransformed_(catchBlock.catchBody);
  23352. var catchStart = this.allocateState();
  23353. this.addMachineVariable(exceptionName);
  23354. var states = $traceurRuntime.spread(tryMachine.states, [new FallThroughState(catchStart, catchMachine.startState, parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.popTry();\n $ctx.maybeUncatchable(); // see RETURN_SENTINEL in runtime\n ", " = $ctx.storedException;"]), id(exceptionName)))]);
  23355. this.replaceAndAddStates_(catchMachine.states, catchMachine.fallThroughState, tryMachine.fallThroughState, states);
  23356. tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states, [new CatchState(exceptionName, catchStart, tryMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]);
  23357. tryMachine = tryMachine.replaceStateId(catchStart, outerCatchState);
  23358. }
  23359. if (finallyBlock !== null) {
  23360. var finallyMachine = this.ensureTransformed_(finallyBlock.block);
  23361. var popTry$__15 = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.popTry();"])));
  23362. finallyMachine = popTry$__15.append(finallyMachine);
  23363. var states$__16 = $traceurRuntime.spread(tryMachine.states, finallyMachine.states, [new FinallyFallThroughState(finallyMachine.fallThroughState)]);
  23364. tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states$__16, [new FinallyState(finallyMachine.startState, finallyMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]);
  23365. tryMachine = tryMachine.replaceStateId(finallyMachine.startState, outerFinallyState);
  23366. }
  23367. return tryMachine;
  23368. },
  23369. transformWhileStatement: function(tree) {
  23370. var $__8;
  23371. var $__6,
  23372. $__7;
  23373. var labels = this.getLabels_();
  23374. var label = this.clearCurrentLabel_();
  23375. var condition,
  23376. machine,
  23377. body;
  23378. if (this.expressionNeedsStateMachine(tree.condition)) {
  23379. (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6));
  23380. body = this.transformAny(tree.body);
  23381. } else {
  23382. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformWhileStatement").call(this, tree);
  23383. (($__7 = result, condition = $__7.condition, body = $__7.body, $__7));
  23384. if (body.type !== STATE_MACHINE)
  23385. return result;
  23386. }
  23387. var loopBodyMachine = this.ensureTransformed_(body);
  23388. var startState = loopBodyMachine.fallThroughState;
  23389. var fallThroughState = this.allocateState();
  23390. var states = [];
  23391. var conditionStart = startState;
  23392. if (machine) {
  23393. machine = machine.replaceStartState(startState);
  23394. conditionStart = machine.fallThroughState;
  23395. ($__8 = states).push.apply($__8, $traceurRuntime.spread(machine.states));
  23396. }
  23397. states.push(new ConditionalState(conditionStart, loopBodyMachine.startState, fallThroughState, condition));
  23398. this.addLoopBodyStates_(loopBodyMachine, startState, fallThroughState, labels, states);
  23399. machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks);
  23400. if (label)
  23401. machine = machine.replaceStateId(startState, label.continueState);
  23402. return machine;
  23403. },
  23404. transformWithStatement: function(tree) {
  23405. var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformWithStatement").call(this, tree);
  23406. if (result.body.type !== STATE_MACHINE) {
  23407. return result;
  23408. }
  23409. throw new Error('Unreachable - with statement not allowed in strict mode/harmony');
  23410. },
  23411. generateMachineInnerFunction: function(machine) {
  23412. var enclosingFinallyState = machine.getEnclosingFinallyMap();
  23413. var SwitchStatement = createSwitchStatement(createMemberExpression('$ctx', 'state'), this.transformMachineStates(machine, State.END_STATE, State.RETHROW_STATE, enclosingFinallyState));
  23414. return parseExpression($traceurRuntime.getTemplateObject(["function($ctx) {\n while (true) ", "\n }"]), SwitchStatement);
  23415. },
  23416. addTempVar: function() {
  23417. var name = this.getTempIdentifier();
  23418. this.addMachineVariable(name);
  23419. return name;
  23420. },
  23421. addMachineVariable: function(name) {
  23422. this.hoistVariablesTransformer_.addVariable(name);
  23423. },
  23424. transformCpsFunctionBody: function(tree, runtimeMethod) {
  23425. var $__8;
  23426. var functionRef = arguments[2];
  23427. var alphaRenamedTree = AlphaRenamer.rename(tree, 'arguments', '$arguments');
  23428. var hasArguments = alphaRenamedTree !== tree;
  23429. var hoistedTree = this.hoistVariablesTransformer_.transformAny(alphaRenamedTree);
  23430. var maybeMachine = this.transformAny(hoistedTree);
  23431. if (this.reporter.hadError())
  23432. return tree;
  23433. var machine;
  23434. if (maybeMachine.type !== STATE_MACHINE) {
  23435. machine = this.statementsToStateMachine_(maybeMachine.statements);
  23436. } else {
  23437. machine = new StateMachine(maybeMachine.startState, maybeMachine.fallThroughState, this.removeEmptyStates(maybeMachine.states), maybeMachine.exceptionBlocks);
  23438. }
  23439. machine = machine.replaceFallThroughState(State.END_STATE).replaceStartState(State.START_STATE);
  23440. var statements = [];
  23441. if (this.hoistVariablesTransformer_.hasFunctions())
  23442. ($__8 = statements).push.apply($__8, $traceurRuntime.spread(this.hoistVariablesTransformer_.getFunctions()));
  23443. if (this.hoistVariablesTransformer_.hasVariables())
  23444. statements.push(this.hoistVariablesTransformer_.getVariableStatement());
  23445. if (hasArguments)
  23446. statements.push(parseStatement($traceurRuntime.getTemplateObject(["var $arguments = arguments;"])));
  23447. if (functionRef) {
  23448. statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", "(\n ", ",\n ", ", this);"]), runtimeMethod, this.generateMachineInnerFunction(machine), functionRef));
  23449. } else {
  23450. statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", "(\n ", ", this);"]), runtimeMethod, this.generateMachineInnerFunction(machine)));
  23451. }
  23452. return createFunctionBody(statements);
  23453. },
  23454. transformFunctionDeclaration: function(tree) {
  23455. return tree;
  23456. },
  23457. transformFunctionExpression: function(tree) {
  23458. return tree;
  23459. },
  23460. transformGetAccessor: function(tree) {
  23461. return tree;
  23462. },
  23463. transformSetAccessor: function(tree) {
  23464. return tree;
  23465. },
  23466. transformArrowFunction: function(tree) {
  23467. return tree;
  23468. },
  23469. transformStateMachine: function(tree) {
  23470. return tree;
  23471. },
  23472. statementToStateMachine_: function(statement) {
  23473. var statements;
  23474. if (statement.type === BLOCK)
  23475. statements = statement.statements;
  23476. else
  23477. statements = [statement];
  23478. return this.statementsToStateMachine_(statements);
  23479. },
  23480. statementsToStateMachine_: function(statements) {
  23481. var startState = this.allocateState();
  23482. var fallThroughState = this.allocateState();
  23483. return this.stateToStateMachine_(new FallThroughState(startState, fallThroughState, statements), fallThroughState);
  23484. },
  23485. stateToStateMachine_: function(newState, fallThroughState) {
  23486. return new StateMachine(newState.id, fallThroughState, [newState], []);
  23487. },
  23488. transformMachineStates: function(machine, machineEndState, rethrowState, enclosingFinallyState) {
  23489. var cases = [];
  23490. for (var i = 0; i < machine.states.length; i++) {
  23491. var state = machine.states[i];
  23492. var stateCase = state.transformMachineState(enclosingFinallyState[state.id], machineEndState, this.reporter);
  23493. if (stateCase !== null) {
  23494. cases.push(stateCase);
  23495. }
  23496. }
  23497. this.addFinallyFallThroughDispatches(null, machine.exceptionBlocks, cases);
  23498. cases.push(createDefaultClause(parseStatements($traceurRuntime.getTemplateObject(["return $ctx.end()"]))));
  23499. return cases;
  23500. },
  23501. addFinallyFallThroughDispatches: function(enclosingFinallyState, tryStates, cases) {
  23502. for (var i = 0; i < tryStates.length; i++) {
  23503. var tryState = tryStates[i];
  23504. if (tryState.kind === TryState.Kind.FINALLY) {
  23505. var finallyState = tryState;
  23506. if (enclosingFinallyState !== null) {
  23507. var caseClauses = [];
  23508. var index = 0;
  23509. for (var j = 0; j < enclosingFinallyState.tryStates.length; j++) {
  23510. var destination = enclosingFinallyState.tryStates[j];
  23511. index++;
  23512. var statements = void 0;
  23513. if (index < enclosingFinallyState.tryStates.length) {
  23514. statements = [];
  23515. } else {
  23516. statements = parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.state = $ctx.finallyFallThrough;\n $ctx.finallyFallThrough = ", ";\n break;"]), State.INVALID_STATE);
  23517. }
  23518. caseClauses.push(createCaseClause(createNumberLiteral(destination), statements));
  23519. }
  23520. caseClauses.push(createDefaultClause([createAssignStateStatement(enclosingFinallyState.finallyState), createBreakStatement()]));
  23521. cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), [createSwitchStatement(createMemberExpression('$ctx', 'finallyFallThrough'), caseClauses), createBreakStatement()]));
  23522. } else {
  23523. cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.state = $ctx.finallyFallThrough;\n break;"]))));
  23524. }
  23525. this.addFinallyFallThroughDispatches(finallyState, finallyState.nestedTrys, cases);
  23526. } else {
  23527. this.addFinallyFallThroughDispatches(enclosingFinallyState, tryState.nestedTrys, cases);
  23528. }
  23529. }
  23530. },
  23531. transformVariableDeclarationList: function(tree) {
  23532. this.reporter.reportError(tree.location, 'Traceur: const/let declarations in a block containing a yield are ' + 'not yet implemented');
  23533. return tree;
  23534. },
  23535. maybeTransformStatement_: function(maybeTransformedStatement) {
  23536. var breakContinueTransformed = new BreakContinueTransformer(this.stateAllocator_).transformAny(maybeTransformedStatement);
  23537. if (breakContinueTransformed !== maybeTransformedStatement) {
  23538. breakContinueTransformed = this.transformAny(breakContinueTransformed);
  23539. }
  23540. return breakContinueTransformed;
  23541. },
  23542. ensureTransformed_: function(statement) {
  23543. if (statement === null) {
  23544. return null;
  23545. }
  23546. var maybeTransformed = this.maybeTransformStatement_(statement);
  23547. return maybeTransformed.type === STATE_MACHINE ? maybeTransformed : this.statementToStateMachine_(maybeTransformed);
  23548. },
  23549. ensureTransformedList_: function(statements) {
  23550. var maybeTransformedStatements = [];
  23551. var foundMachine = false;
  23552. for (var i = 0; i < statements.length; i++) {
  23553. var statement = statements[i];
  23554. var maybeTransformedStatement = this.maybeTransformStatement_(statement);
  23555. maybeTransformedStatements.push(maybeTransformedStatement);
  23556. if (maybeTransformedStatement.type === STATE_MACHINE) {
  23557. foundMachine = true;
  23558. }
  23559. }
  23560. if (!foundMachine) {
  23561. return this.statementsToStateMachine_(statements);
  23562. }
  23563. return this.transformStatementList_(maybeTransformedStatements);
  23564. },
  23565. expressionToStateMachine: function(tree) {
  23566. var commaExpression = new ExplodeExpressionTransformer(this).transformAny(tree);
  23567. var statements = new NormalizeCommaExpressionToStatementTransformer().transformAny(commaExpression).statements;
  23568. var lastStatement = statements.pop();
  23569. assert(lastStatement.type === EXPRESSION_STATEMENT);
  23570. var expression = lastStatement.expression;
  23571. statements = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformList").call(this, statements);
  23572. var machine = this.transformStatementList_(statements);
  23573. return {
  23574. expression: expression,
  23575. machine: machine
  23576. };
  23577. }
  23578. }, {}, $__super);
  23579. }(TempVarTransformer);
  23580. var NormalizeCommaExpressionToStatementTransformer = function($__super) {
  23581. function NormalizeCommaExpressionToStatementTransformer() {
  23582. $traceurRuntime.superConstructor(NormalizeCommaExpressionToStatementTransformer).apply(this, arguments);
  23583. }
  23584. return ($traceurRuntime.createClass)(NormalizeCommaExpressionToStatementTransformer, {
  23585. transformCommaExpression: function(tree) {
  23586. var $__5 = this;
  23587. var statements = tree.expressions.map(function(expr) {
  23588. if (expr.type === CONDITIONAL_EXPRESSION)
  23589. return $__5.transformAny(expr);
  23590. return createExpressionStatement(expr);
  23591. });
  23592. return new AnonBlock(tree.location, statements);
  23593. },
  23594. transformConditionalExpression: function(tree) {
  23595. var ifBlock = this.transformAny(tree.left);
  23596. var elseBlock = this.transformAny(tree.right);
  23597. return new IfStatement(tree.location, tree.condition, anonBlockToBlock(ifBlock), anonBlockToBlock(elseBlock));
  23598. }
  23599. }, {}, $__super);
  23600. }(ParseTreeTransformer);
  23601. function anonBlockToBlock(tree) {
  23602. if (tree.type === PAREN_EXPRESSION)
  23603. return anonBlockToBlock(tree.expression);
  23604. return new Block(tree.location, tree.statements);
  23605. }
  23606. return {get CPSTransformer() {
  23607. return CPSTransformer;
  23608. }};
  23609. });
  23610. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/EndState.js", [], function() {
  23611. "use strict";
  23612. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/EndState.js";
  23613. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/EndState.js")).State;
  23614. var EndState = function($__super) {
  23615. function EndState() {
  23616. $traceurRuntime.superConstructor(EndState).apply(this, arguments);
  23617. }
  23618. return ($traceurRuntime.createClass)(EndState, {
  23619. replaceState: function(oldState, newState) {
  23620. return new EndState(State.replaceStateId(this.id, oldState, newState));
  23621. },
  23622. transform: function(enclosingFinally, machineEndState, reporter) {
  23623. return State.generateJump(enclosingFinally, machineEndState);
  23624. }
  23625. }, {}, $__super);
  23626. }(State);
  23627. return {get EndState() {
  23628. return EndState;
  23629. }};
  23630. });
  23631. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js", [], function() {
  23632. "use strict";
  23633. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js";
  23634. var AwaitState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AwaitState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).AwaitState;
  23635. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")),
  23636. BinaryExpression = $__4.BinaryExpression,
  23637. ExpressionStatement = $__4.ExpressionStatement;
  23638. var CPSTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CPSTransformer.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).CPSTransformer;
  23639. var EndState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./EndState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).EndState;
  23640. var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).FallThroughState;
  23641. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).default;
  23642. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")),
  23643. AWAIT_EXPRESSION = $__9.AWAIT_EXPRESSION,
  23644. BINARY_EXPRESSION = $__9.BINARY_EXPRESSION,
  23645. STATE_MACHINE = $__9.STATE_MACHINE;
  23646. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")),
  23647. parseExpression = $__10.parseExpression,
  23648. parseStatement = $__10.parseStatement,
  23649. parseStatements = $__10.parseStatements;
  23650. var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).StateMachine;
  23651. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).FindInFunctionScope;
  23652. var createUndefinedExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).createUndefinedExpression;
  23653. function isAwaitAssign(tree) {
  23654. return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === AWAIT_EXPRESSION && tree.left.isLeftHandSideExpression();
  23655. }
  23656. var AwaitFinder = function($__super) {
  23657. function AwaitFinder() {
  23658. $traceurRuntime.superConstructor(AwaitFinder).apply(this, arguments);
  23659. }
  23660. return ($traceurRuntime.createClass)(AwaitFinder, {visitAwaitExpression: function(tree) {
  23661. this.found = true;
  23662. }}, {}, $__super);
  23663. }(FindInFunctionScope);
  23664. function scopeContainsAwait(tree) {
  23665. var visitor = new AwaitFinder();
  23666. visitor.visitAny(tree);
  23667. return visitor.found;
  23668. }
  23669. var AsyncTransformer = function($__super) {
  23670. function AsyncTransformer() {
  23671. $traceurRuntime.superConstructor(AsyncTransformer).apply(this, arguments);
  23672. }
  23673. return ($traceurRuntime.createClass)(AsyncTransformer, {
  23674. expressionNeedsStateMachine: function(tree) {
  23675. if (tree === null)
  23676. return false;
  23677. return scopeContainsAwait(tree);
  23678. },
  23679. transformExpressionStatement: function(tree) {
  23680. var expression = tree.expression;
  23681. if (expression.type === AWAIT_EXPRESSION)
  23682. return this.transformAwaitExpression_(expression);
  23683. if (isAwaitAssign(expression))
  23684. return this.transformAwaitAssign_(expression);
  23685. if (this.expressionNeedsStateMachine(expression)) {
  23686. return this.expressionToStateMachine(expression).machine;
  23687. }
  23688. return $traceurRuntime.superGet(this, AsyncTransformer.prototype, "transformExpressionStatement").call(this, tree);
  23689. },
  23690. transformAwaitExpression: function(tree) {
  23691. throw new Error('Internal error');
  23692. },
  23693. transformAwaitExpression_: function(tree) {
  23694. return this.transformAwait_(tree, tree.expression, null, null);
  23695. },
  23696. transformAwaitAssign_: function(tree) {
  23697. return this.transformAwait_(tree, tree.right.expression, tree.left, tree.operator);
  23698. },
  23699. transformAwait_: function(tree, inExpression, left, operator) {
  23700. var $__2;
  23701. var expression,
  23702. machine;
  23703. if (this.expressionNeedsStateMachine(inExpression)) {
  23704. (($__2 = this.expressionToStateMachine(inExpression), expression = $__2.expression, machine = $__2.machine, $__2));
  23705. } else {
  23706. expression = this.transformAny(inExpression);
  23707. }
  23708. var createTaskState = this.allocateState();
  23709. var fallThroughState = this.allocateState();
  23710. var callbackState = left ? this.allocateState() : fallThroughState;
  23711. var states = [];
  23712. states.push(new AwaitState(createTaskState, callbackState, expression));
  23713. if (left) {
  23714. var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, operator, parseExpression($traceurRuntime.getTemplateObject(["$ctx.value"]))));
  23715. states.push(new FallThroughState(callbackState, fallThroughState, [statement]));
  23716. }
  23717. var awaitMachine = new StateMachine(createTaskState, fallThroughState, states, []);
  23718. if (machine) {
  23719. awaitMachine = machine.append(awaitMachine);
  23720. }
  23721. return awaitMachine;
  23722. },
  23723. transformFinally: function(tree) {
  23724. var result = $traceurRuntime.superGet(this, AsyncTransformer.prototype, "transformFinally").call(this, tree);
  23725. if (result.block.type !== STATE_MACHINE) {
  23726. return result;
  23727. }
  23728. this.reporter.reportError(tree.location, 'await not permitted within a finally block.');
  23729. return result;
  23730. },
  23731. transformReturnStatement: function(tree) {
  23732. var $__2;
  23733. var expression,
  23734. machine;
  23735. if (this.expressionNeedsStateMachine(tree.expression)) {
  23736. (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2));
  23737. } else {
  23738. expression = tree.expression || createUndefinedExpression();
  23739. }
  23740. var startState = this.allocateState();
  23741. var endState = this.allocateState();
  23742. var completeState = new FallThroughState(startState, endState, parseStatements($traceurRuntime.getTemplateObject(["$ctx.returnValue = ", ""]), expression));
  23743. var end = new EndState(endState);
  23744. var returnMachine = new StateMachine(startState, this.allocateState(), [completeState, end], []);
  23745. if (machine)
  23746. returnMachine = machine.append(returnMachine);
  23747. return returnMachine;
  23748. },
  23749. createCompleteTask_: function(result) {
  23750. return parseStatement($traceurRuntime.getTemplateObject(["$ctx.resolve(", ")"]), result);
  23751. },
  23752. transformAsyncBody: function(tree) {
  23753. var asyncWrap = this.getRuntimeExpression('asyncWrap');
  23754. return this.transformCpsFunctionBody(tree, asyncWrap);
  23755. }
  23756. }, {transformAsyncBody: function(identifierGenerator, reporter, options, body) {
  23757. return new AsyncTransformer(identifierGenerator, reporter, options).transformAsyncBody(body);
  23758. }}, $__super);
  23759. }(ImportRuntimeTrait(CPSTransformer));
  23760. ;
  23761. return {get AsyncTransformer() {
  23762. return AsyncTransformer;
  23763. }};
  23764. });
  23765. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js", [], function() {
  23766. "use strict";
  23767. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js";
  23768. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")),
  23769. BLOCK = $__3.BLOCK,
  23770. VARIABLE_DECLARATION_LIST = $__3.VARIABLE_DECLARATION_LIST,
  23771. IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION;
  23772. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")),
  23773. LENGTH = $__4.LENGTH,
  23774. PUSH = $__4.PUSH;
  23775. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")).TempVarTransformer;
  23776. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")),
  23777. BANG = $__6.BANG,
  23778. IN = $__6.IN,
  23779. OPEN_ANGLE = $__6.OPEN_ANGLE,
  23780. PLUS_PLUS = $__6.PLUS_PLUS,
  23781. VAR = $__6.VAR;
  23782. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")),
  23783. createArgumentList = $__7.createArgumentList,
  23784. createAssignmentStatement = $__7.createAssignmentStatement,
  23785. createBinaryExpression = $__7.createBinaryExpression,
  23786. createBlock = $__7.createBlock,
  23787. createCallStatement = $__7.createCallStatement,
  23788. createContinueStatement = $__7.createContinueStatement,
  23789. createEmptyArrayLiteral = $__7.createEmptyArrayLiteral,
  23790. createForInStatement = $__7.createForInStatement,
  23791. createForStatement = $__7.createForStatement,
  23792. createIdentifierExpression = $__7.createIdentifierExpression,
  23793. createIfStatement = $__7.createIfStatement,
  23794. createMemberExpression = $__7.createMemberExpression,
  23795. createMemberLookupExpression = $__7.createMemberLookupExpression,
  23796. createNumberLiteral = $__7.createNumberLiteral,
  23797. createOperatorToken = $__7.createOperatorToken,
  23798. createParenExpression = $__7.createParenExpression,
  23799. createPostfixExpression = $__7.createPostfixExpression,
  23800. createUnaryExpression = $__7.createUnaryExpression,
  23801. createVariableDeclarationList = $__7.createVariableDeclarationList,
  23802. createVariableStatement = $__7.createVariableStatement;
  23803. var ForInTransformPass = function($__super) {
  23804. function ForInTransformPass() {
  23805. $traceurRuntime.superConstructor(ForInTransformPass).apply(this, arguments);
  23806. }
  23807. return ($traceurRuntime.createClass)(ForInTransformPass, {transformForInStatement: function(tree) {
  23808. var $__1,
  23809. $__2;
  23810. var bodyStatements = [];
  23811. var body = this.transformAny(tree.body);
  23812. if (body.type === BLOCK) {
  23813. ($__1 = bodyStatements).push.apply($__1, $traceurRuntime.spread(body.statements));
  23814. } else {
  23815. bodyStatements.push(body);
  23816. }
  23817. var elements = [];
  23818. var keys = this.getTempIdentifier();
  23819. elements.push(createVariableStatement(VAR, keys, createEmptyArrayLiteral()));
  23820. var collection = this.getTempIdentifier();
  23821. elements.push(createVariableStatement(VAR, collection, tree.collection));
  23822. var p = this.getTempIdentifier();
  23823. elements.push(createForInStatement(createVariableDeclarationList(VAR, p, null), createIdentifierExpression(collection), createCallStatement(createMemberExpression(keys, PUSH), createArgumentList([createIdentifierExpression(p)]))));
  23824. var i = this.getTempIdentifier();
  23825. var lookup = createMemberLookupExpression(createIdentifierExpression(keys), createIdentifierExpression(i));
  23826. var originalKey,
  23827. assignOriginalKey;
  23828. if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {
  23829. var decList = tree.initializer;
  23830. originalKey = createIdentifierExpression(decList.declarations[0].lvalue);
  23831. assignOriginalKey = createVariableStatement(decList.declarationType, originalKey.identifierToken, lookup);
  23832. } else if (tree.initializer.type === IDENTIFIER_EXPRESSION) {
  23833. originalKey = tree.initializer;
  23834. assignOriginalKey = createAssignmentStatement(tree.initializer, lookup);
  23835. } else {
  23836. throw new Error('Invalid left hand side of for in loop');
  23837. }
  23838. var innerBlock = [];
  23839. innerBlock.push(assignOriginalKey);
  23840. innerBlock.push(createIfStatement(createUnaryExpression(createOperatorToken(BANG), createParenExpression(createBinaryExpression(originalKey, createOperatorToken(IN), createIdentifierExpression(collection)))), createContinueStatement(), null));
  23841. ($__2 = innerBlock).push.apply($__2, $traceurRuntime.spread(bodyStatements));
  23842. elements.push(createForStatement(createVariableDeclarationList(VAR, i, createNumberLiteral(0)), createBinaryExpression(createIdentifierExpression(i), createOperatorToken(OPEN_ANGLE), createMemberExpression(keys, LENGTH)), createPostfixExpression(createIdentifierExpression(i), createOperatorToken(PLUS_PLUS)), createBlock(innerBlock)));
  23843. return createBlock(elements);
  23844. }}, {}, $__super);
  23845. }(TempVarTransformer);
  23846. return {get ForInTransformPass() {
  23847. return ForInTransformPass;
  23848. }};
  23849. });
  23850. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/YieldState.js", [], function() {
  23851. "use strict";
  23852. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/YieldState.js";
  23853. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/YieldState.js")).State;
  23854. var createReturnStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/YieldState.js")).createReturnStatement;
  23855. var YieldState = function($__super) {
  23856. function YieldState(id, fallThroughState, expression) {
  23857. $traceurRuntime.superConstructor(YieldState).call(this, id);
  23858. this.fallThroughState = fallThroughState;
  23859. this.expression = expression;
  23860. }
  23861. return ($traceurRuntime.createClass)(YieldState, {
  23862. replaceState: function(oldState, newState) {
  23863. return new this.constructor(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.expression);
  23864. },
  23865. transform: function(enclosingFinally, machineEndState, reporter) {
  23866. return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, this.fallThroughState), [createReturnStatement(this.expression)]);
  23867. }
  23868. }, {}, $__super);
  23869. }(State);
  23870. return {get YieldState() {
  23871. return YieldState;
  23872. }};
  23873. });
  23874. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ReturnState.js", [], function() {
  23875. "use strict";
  23876. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ReturnState.js";
  23877. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../semantics/util.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")),
  23878. isUndefined = $__2.isUndefined,
  23879. isVoidExpression = $__2.isVoidExpression;
  23880. var YieldState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./YieldState.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).YieldState;
  23881. var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).State;
  23882. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).parseStatement;
  23883. var ReturnState = function($__super) {
  23884. function ReturnState() {
  23885. $traceurRuntime.superConstructor(ReturnState).apply(this, arguments);
  23886. }
  23887. return ($traceurRuntime.createClass)(ReturnState, {transform: function(enclosingFinally, machineEndState, reporter) {
  23888. var $__1;
  23889. var e = this.expression;
  23890. var statements = [];
  23891. if (e && !isUndefined(e) && !isVoidExpression(e))
  23892. statements.push(parseStatement($traceurRuntime.getTemplateObject(["$ctx.returnValue = ", ""]), this.expression));
  23893. ($__1 = statements).push.apply($__1, $traceurRuntime.spread(State.generateJump(enclosingFinally, machineEndState)));
  23894. return statements;
  23895. }}, {}, $__super);
  23896. }(YieldState);
  23897. return {get ReturnState() {
  23898. return ReturnState;
  23899. }};
  23900. });
  23901. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js", [], function() {
  23902. "use strict";
  23903. var __moduleName = "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js";
  23904. var CPSTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CPSTransformer.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).CPSTransformer;
  23905. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")),
  23906. BINARY_EXPRESSION = $__4.BINARY_EXPRESSION,
  23907. YIELD_EXPRESSION = $__4.YIELD_EXPRESSION;
  23908. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")),
  23909. BinaryExpression = $__5.BinaryExpression,
  23910. ExpressionStatement = $__5.ExpressionStatement;
  23911. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).FindInFunctionScope;
  23912. var ReturnState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ReturnState.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).ReturnState;
  23913. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).default;
  23914. var YieldState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./YieldState.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).YieldState;
  23915. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")),
  23916. id = $__10.createIdentifierExpression,
  23917. createMemberExpression = $__10.createMemberExpression,
  23918. createUndefinedExpression = $__10.createUndefinedExpression;
  23919. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")),
  23920. parseExpression = $__11.parseExpression,
  23921. parseStatement = $__11.parseStatement,
  23922. parseStatements = $__11.parseStatements;
  23923. function isYieldAssign(tree) {
  23924. return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === YIELD_EXPRESSION && tree.left.isLeftHandSideExpression();
  23925. }
  23926. var YieldFinder = function($__super) {
  23927. function YieldFinder() {
  23928. $traceurRuntime.superConstructor(YieldFinder).apply(this, arguments);
  23929. }
  23930. return ($traceurRuntime.createClass)(YieldFinder, {visitYieldExpression: function(tree) {
  23931. this.found = true;
  23932. }}, {}, $__super);
  23933. }(FindInFunctionScope);
  23934. function scopeContainsYield(tree) {
  23935. var finder = new YieldFinder();
  23936. finder.visitAny(tree);
  23937. return finder.found;
  23938. }
  23939. var GeneratorTransformer = function($__super) {
  23940. function GeneratorTransformer(identifierGenerator, reporter, options) {
  23941. $traceurRuntime.superConstructor(GeneratorTransformer).call(this, identifierGenerator, reporter, options);
  23942. this.shouldAppendThrowCloseState_ = true;
  23943. }
  23944. return ($traceurRuntime.createClass)(GeneratorTransformer, {
  23945. expressionNeedsStateMachine: function(tree) {
  23946. if (tree === null)
  23947. return false;
  23948. return scopeContainsYield(tree);
  23949. },
  23950. transformYieldExpression_: function(tree) {
  23951. var $__2;
  23952. var expression,
  23953. machine;
  23954. if (this.expressionNeedsStateMachine(tree.expression)) {
  23955. (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2));
  23956. } else {
  23957. expression = this.transformAny(tree.expression);
  23958. }
  23959. if (tree.isYieldFor)
  23960. return this.transformYieldForExpression_(expression, machine);
  23961. var startState = this.allocateState();
  23962. var fallThroughState = this.allocateState();
  23963. var yieldMachine = this.stateToStateMachine_(new YieldState(startState, fallThroughState, expression), fallThroughState);
  23964. if (machine)
  23965. yieldMachine = machine.append(yieldMachine);
  23966. if (this.shouldAppendThrowCloseState_)
  23967. yieldMachine = yieldMachine.append(this.createThrowCloseState_());
  23968. return yieldMachine;
  23969. },
  23970. transformYieldForExpression_: function(expression) {
  23971. var machine = arguments[1];
  23972. var gName = this.getTempIdentifier();
  23973. this.addMachineVariable(gName);
  23974. var g = id(gName);
  23975. var nextName = this.getTempIdentifier();
  23976. this.addMachineVariable(nextName);
  23977. var next = id(nextName);
  23978. var statements = parseStatements($traceurRuntime.getTemplateObject(["\n ", " = $ctx.wrapYieldStar(", "[Symbol.iterator]());\n // received = void 0;\n $ctx.sent = void 0;\n // send = true; // roughly equivalent\n $ctx.action = 'next';\n\n for (;;) {\n ", " = ", "[$ctx.action]($ctx.sentIgnoreThrow);\n if (", ".done) {\n $ctx.sent = ", ".value;\n break;\n }\n yield ", ".value;\n }"]), g, expression, next, g, next, next, next);
  23979. var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_;
  23980. this.shouldAppendThrowCloseState_ = false;
  23981. statements = this.transformList(statements);
  23982. var yieldMachine = this.transformStatementList_(statements);
  23983. this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState;
  23984. if (machine)
  23985. yieldMachine = machine.append(yieldMachine);
  23986. return yieldMachine;
  23987. },
  23988. transformYieldExpression: function(tree) {
  23989. this.reporter.reportError(tree.location, 'Only \'a = yield b\' and \'var a = yield b\' currently supported.');
  23990. return tree;
  23991. },
  23992. transformYieldAssign_: function(tree) {
  23993. var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_;
  23994. this.shouldAppendThrowCloseState_ = false;
  23995. var machine = this.transformYieldExpression_(tree.right);
  23996. var left = this.transformAny(tree.left);
  23997. var sentExpression = tree.right.isYieldFor ? parseExpression($traceurRuntime.getTemplateObject(["$ctx.sentIgnoreThrow"])) : parseExpression($traceurRuntime.getTemplateObject(["$ctx.sent"]));
  23998. var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, tree.operator, sentExpression));
  23999. var assignMachine = this.statementToStateMachine_(statement);
  24000. this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState;
  24001. return machine.append(assignMachine);
  24002. },
  24003. createThrowCloseState_: function() {
  24004. return this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.maybeThrow()"])));
  24005. },
  24006. transformExpressionStatement: function(tree) {
  24007. var expression = tree.expression;
  24008. if (expression.type === YIELD_EXPRESSION)
  24009. return this.transformYieldExpression_(expression);
  24010. if (isYieldAssign(expression))
  24011. return this.transformYieldAssign_(expression);
  24012. if (this.expressionNeedsStateMachine(expression)) {
  24013. return this.expressionToStateMachine(expression).machine;
  24014. }
  24015. return $traceurRuntime.superGet(this, GeneratorTransformer.prototype, "transformExpressionStatement").call(this, tree);
  24016. },
  24017. transformAwaitStatement: function(tree) {
  24018. this.reporter.reportError(tree.location, 'Generator function may not have an await statement.');
  24019. return tree;
  24020. },
  24021. transformReturnStatement: function(tree) {
  24022. var $__2;
  24023. var expression,
  24024. machine;
  24025. if (this.expressionNeedsStateMachine(tree.expression))
  24026. (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2));
  24027. else
  24028. expression = tree.expression;
  24029. var startState = this.allocateState();
  24030. var fallThroughState = this.allocateState();
  24031. var returnMachine = this.stateToStateMachine_(new ReturnState(startState, fallThroughState, this.transformAny(expression)), fallThroughState);
  24032. if (machine)
  24033. return machine.append(returnMachine);
  24034. return returnMachine;
  24035. },
  24036. transformGeneratorBody: function(tree, name) {
  24037. var createGeneratorInstance = this.getRuntimeExpression('createGeneratorInstance');
  24038. return this.transformCpsFunctionBody(tree, createGeneratorInstance, name);
  24039. }
  24040. }, {transformGeneratorBody: function(identifierGenerator, reporter, options, body, name) {
  24041. return new GeneratorTransformer(identifierGenerator, reporter, options).transformGeneratorBody(body, name);
  24042. }}, $__super);
  24043. }(ImportRuntimeTrait(CPSTransformer));
  24044. ;
  24045. return {get GeneratorTransformer() {
  24046. return GeneratorTransformer;
  24047. }};
  24048. });
  24049. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js", [], function() {
  24050. "use strict";
  24051. var __moduleName = "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js";
  24052. var ArrowFunctionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrowFunctionTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).ArrowFunctionTransformer;
  24053. var AsyncTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/AsyncTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).AsyncTransformer;
  24054. var ForInTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/ForInTransformPass.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).ForInTransformPass;
  24055. var GeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/GeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).GeneratorTransformer;
  24056. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")),
  24057. parseExpression = $__8.parseExpression,
  24058. parseStatement = $__8.parseStatement;
  24059. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).TempVarTransformer;
  24060. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).default;
  24061. var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).FindInFunctionScope;
  24062. var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")),
  24063. AnonBlock = $__12.AnonBlock,
  24064. FunctionDeclaration = $__12.FunctionDeclaration,
  24065. FunctionExpression = $__12.FunctionExpression;
  24066. var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")),
  24067. createBindingIdentifier = $__13.createBindingIdentifier,
  24068. id = $__13.createIdentifierExpression,
  24069. createIdentifierToken = $__13.createIdentifierToken;
  24070. var ForInFinder = function($__super) {
  24071. function ForInFinder() {
  24072. $traceurRuntime.superConstructor(ForInFinder).apply(this, arguments);
  24073. }
  24074. return ($traceurRuntime.createClass)(ForInFinder, {visitForInStatement: function(tree) {
  24075. this.found = true;
  24076. }}, {}, $__super);
  24077. }(FindInFunctionScope);
  24078. function needsTransform(tree, transformOptions) {
  24079. return transformOptions.generators && tree.isGenerator() || transformOptions.asyncFunctions && tree.isAsyncFunction();
  24080. }
  24081. var GeneratorTransformPass = function($__super) {
  24082. function GeneratorTransformPass(identifierGenerator, reporter, options) {
  24083. $traceurRuntime.superConstructor(GeneratorTransformPass).call(this, identifierGenerator, reporter, options);
  24084. this.tranformOptions_ = options.transformOptions;
  24085. this.inBlock_ = false;
  24086. }
  24087. return ($traceurRuntime.createClass)(GeneratorTransformPass, {
  24088. transformFunctionDeclaration: function(tree) {
  24089. if (!needsTransform(tree, this.tranformOptions_))
  24090. return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformFunctionDeclaration").call(this, tree);
  24091. if (tree.isGenerator())
  24092. return this.transformGeneratorDeclaration_(tree);
  24093. return this.transformFunction_(tree, FunctionDeclaration, null);
  24094. },
  24095. transformGeneratorDeclaration_: function(tree) {
  24096. var nameIdExpression = id(tree.name.identifierToken);
  24097. var initGeneratorFunction = this.getRuntimeExpression('initGeneratorFunction');
  24098. var setupPrototypeExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initGeneratorFunction, nameIdExpression);
  24099. var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupPrototypeExpression));
  24100. var funcDecl = this.transformFunction_(tree, FunctionDeclaration, tmpVar);
  24101. if (!this.inBlock_)
  24102. return funcDecl;
  24103. return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ""]), tmpVar, setupPrototypeExpression)]);
  24104. },
  24105. transformFunctionExpression: function(tree) {
  24106. if (!needsTransform(tree, this.tranformOptions_))
  24107. return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformFunctionExpression").call(this, tree);
  24108. if (tree.isGenerator())
  24109. return this.transformGeneratorExpression_(tree);
  24110. return this.transformFunction_(tree, FunctionExpression, null);
  24111. },
  24112. transformGeneratorExpression_: function(tree) {
  24113. var name;
  24114. if (!tree.name) {
  24115. name = createIdentifierToken(this.getTempIdentifier());
  24116. tree = new FunctionExpression(tree.location, createBindingIdentifier(name), tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body);
  24117. } else {
  24118. name = tree.name.identifierToken;
  24119. }
  24120. var functionExpression = this.transformFunction_(tree, FunctionExpression, id(name));
  24121. var initGeneratorFunction = this.getRuntimeExpression('initGeneratorFunction');
  24122. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initGeneratorFunction, functionExpression);
  24123. },
  24124. transformFunction_: function(tree, constructor, nameExpression) {
  24125. var $__2 = this;
  24126. var body = $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformAny").call(this, tree.body);
  24127. var finder = new ForInFinder();
  24128. finder.visitAny(body);
  24129. if (finder.found) {
  24130. body = new ForInTransformPass(this.identifierGenerator, this.reporter, this.options).transformAny(body);
  24131. }
  24132. if (this.tranformOptions_.generators && tree.isGenerator()) {
  24133. var transformer = new GeneratorTransformer(this.identifierGenerator, this.reporter, this.options);
  24134. body = transformer.transformGeneratorBody(body, nameExpression);
  24135. transformer.requiredNames.forEach(function(n) {
  24136. $__2.addImportedName(n);
  24137. });
  24138. } else if (this.tranformOptions_.asyncFunctions && tree.isAsyncFunction()) {
  24139. var transformer$__3 = new AsyncTransformer(this.identifierGenerator, this.reporter, this.options);
  24140. body = transformer$__3.transformAsyncBody(body, nameExpression);
  24141. transformer$__3.requiredNames.forEach(function(n) {
  24142. $__2.addImportedName(n);
  24143. });
  24144. }
  24145. var functionKind = null;
  24146. return new constructor(tree.location, tree.name, functionKind, tree.parameterList, tree.typeAnnotation || null, tree.annotations || null, body);
  24147. },
  24148. transformArrowFunction: function(tree) {
  24149. if (!tree.isAsyncFunction())
  24150. return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformArrowFunction").call(this, tree);
  24151. return this.transformAny(ArrowFunctionTransformer.transform(this, tree));
  24152. },
  24153. transformBlock: function(tree) {
  24154. var inBlock = this.inBlock_;
  24155. this.inBlock_ = true;
  24156. var rv = $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformBlock").call(this, tree);
  24157. this.inBlock_ = inBlock;
  24158. return rv;
  24159. }
  24160. }, {}, $__super);
  24161. }(ImportRuntimeTrait(TempVarTransformer));
  24162. return {get GeneratorTransformPass() {
  24163. return GeneratorTransformPass;
  24164. }};
  24165. });
  24166. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js", [], function() {
  24167. "use strict";
  24168. var __moduleName = "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js";
  24169. var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")).VAR;
  24170. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")).ModuleTransformer;
  24171. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")),
  24172. createBindingIdentifier = $__3.createBindingIdentifier,
  24173. createEmptyStatement = $__3.createEmptyStatement,
  24174. createFunctionBody = $__3.createFunctionBody,
  24175. createImmediatelyInvokedFunctionExpression = $__3.createImmediatelyInvokedFunctionExpression,
  24176. createVariableStatement = $__3.createVariableStatement;
  24177. var anonInlineModules = 0;
  24178. var InlineModuleTransformer = function($__super) {
  24179. function InlineModuleTransformer() {
  24180. $traceurRuntime.superConstructor(InlineModuleTransformer).apply(this, arguments);
  24181. }
  24182. return ($traceurRuntime.createClass)(InlineModuleTransformer, {
  24183. wrapModule: function(statements) {
  24184. var seed = this.moduleName || 'anon_' + ++anonInlineModules;
  24185. var idName = this.getTempVarNameForModuleName(seed);
  24186. var body = createFunctionBody(statements);
  24187. var moduleExpression = createImmediatelyInvokedFunctionExpression(body);
  24188. return [createVariableStatement(VAR, idName, moduleExpression)];
  24189. },
  24190. transformNamedExport: function(tree) {
  24191. return createEmptyStatement();
  24192. },
  24193. transformModuleSpecifier: function(tree) {
  24194. return createBindingIdentifier(this.getTempVarNameForModuleSpecifier(tree));
  24195. }
  24196. }, {}, $__super);
  24197. }(ModuleTransformer);
  24198. return {get InlineModuleTransformer() {
  24199. return InlineModuleTransformer;
  24200. }};
  24201. });
  24202. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js", [], function() {
  24203. "use strict";
  24204. var __moduleName = "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js";
  24205. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")),
  24206. AnonBlock = $__10.AnonBlock,
  24207. ArrayLiteral = $__10.ArrayLiteral,
  24208. ClassExpression = $__10.ClassExpression,
  24209. CommaExpression = $__10.CommaExpression,
  24210. ExpressionStatement = $__10.ExpressionStatement,
  24211. VariableDeclaration = $__10.VariableDeclaration;
  24212. var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")),
  24213. ANON_BLOCK = $__11.ANON_BLOCK,
  24214. CLASS_DECLARATION = $__11.CLASS_DECLARATION,
  24215. FUNCTION_DECLARATION = $__11.FUNCTION_DECLARATION,
  24216. IDENTIFIER_EXPRESSION = $__11.IDENTIFIER_EXPRESSION,
  24217. IMPORT_SPECIFIER_SET = $__11.IMPORT_SPECIFIER_SET,
  24218. NAME_SPACE_IMPORT = $__11.NAME_SPACE_IMPORT;
  24219. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ParseTreeVisitor;
  24220. var ScopeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ScopeTransformer;
  24221. var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")),
  24222. createEmptyParameterList = $__14.createEmptyParameterList,
  24223. createFunctionBody = $__14.createFunctionBody,
  24224. createFunctionExpression = $__14.createFunctionExpression,
  24225. id = $__14.createIdentifierExpression,
  24226. createObjectLiteralForDescriptor = $__14.createObjectLiteralForDescriptor,
  24227. createUseStrictDirective = $__14.createUseStrictDirective,
  24228. createVariableDeclarationList = $__14.createVariableDeclarationList,
  24229. createVariableStatement = $__14.createVariableStatement;
  24230. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ModuleTransformer;
  24231. var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")),
  24232. MINUS_MINUS = $__16.MINUS_MINUS,
  24233. PLUS_PLUS = $__16.PLUS_PLUS,
  24234. VAR = $__16.VAR;
  24235. var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")),
  24236. parseExpression = $__17.parseExpression,
  24237. parseStatement = $__17.parseStatement,
  24238. parseStatements = $__17.parseStatements;
  24239. var HoistVariablesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./HoistVariablesTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).default;
  24240. function flattenAnonBlocks(statements) {
  24241. var $__9;
  24242. var result = [];
  24243. for (var i = 0; i < statements.length; i++) {
  24244. var statement = statements[i];
  24245. if (statement.type === ANON_BLOCK) {
  24246. ($__9 = result).push.apply($__9, $traceurRuntime.spread(statement.statements));
  24247. } else {
  24248. result.push(statement);
  24249. }
  24250. }
  24251. return result;
  24252. }
  24253. var ExportBindingsVisitor = function($__super) {
  24254. function ExportBindingsVisitor() {
  24255. $traceurRuntime.superConstructor(ExportBindingsVisitor).call(this);
  24256. this.bindings = [];
  24257. }
  24258. return ($traceurRuntime.createClass)(ExportBindingsVisitor, {
  24259. visitVariableDeclaration: function(tree) {
  24260. this.visitAny(tree.lvalue);
  24261. },
  24262. visitBindingIdentifier: function(tree) {
  24263. this.bindings.push(tree);
  24264. },
  24265. visitBindingElement: function(tree) {
  24266. this.visitAny(tree.binding);
  24267. }
  24268. }, {}, $__super);
  24269. }(ParseTreeVisitor);
  24270. var DeclarationExtractionTransformer = function($__super) {
  24271. function DeclarationExtractionTransformer() {
  24272. $traceurRuntime.superConstructor(DeclarationExtractionTransformer).call(this);
  24273. this.declarations_ = [];
  24274. }
  24275. return ($traceurRuntime.createClass)(DeclarationExtractionTransformer, {
  24276. getDeclarationStatements: function() {
  24277. return flattenAnonBlocks($traceurRuntime.spread([this.getVariableStatement()], this.declarations_));
  24278. },
  24279. addDeclaration: function(tree) {
  24280. this.declarations_.push(tree);
  24281. },
  24282. transformFunctionDeclaration: function(tree) {
  24283. this.addDeclaration(tree);
  24284. return new AnonBlock(null, []);
  24285. },
  24286. transformClassDeclaration: function(tree) {
  24287. this.addVariable(tree.name.identifierToken.value);
  24288. tree = new ClassExpression(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations, tree.typeParameters);
  24289. return parseStatement($traceurRuntime.getTemplateObject(["", " = ", ""]), tree.name.identifierToken, tree);
  24290. }
  24291. }, {}, $__super);
  24292. }(HoistVariablesTransformer);
  24293. var ModuleNameIdentifierTransformer = function($__super) {
  24294. function ModuleNameIdentifierTransformer() {
  24295. $traceurRuntime.superConstructor(ModuleNameIdentifierTransformer).call(this, '__moduleName');
  24296. this.usesModuleName = false;
  24297. }
  24298. return ($traceurRuntime.createClass)(ModuleNameIdentifierTransformer, {transformIdentifierExpression: function(tree) {
  24299. if (tree.identifierToken.value === '__moduleName') {
  24300. this.usesModuleName = true;
  24301. return parseExpression($traceurRuntime.getTemplateObject(["$__moduleContext.id"]));
  24302. }
  24303. return $traceurRuntime.superGet(this, ModuleNameIdentifierTransformer.prototype, "transformIdentifierExpression").call(this, tree);
  24304. }}, {}, $__super);
  24305. }(ScopeTransformer);
  24306. var InsertBindingAssignmentTransformer = function($__super) {
  24307. function InsertBindingAssignmentTransformer(exportName, bindingName) {
  24308. $traceurRuntime.superConstructor(InsertBindingAssignmentTransformer).call(this, bindingName);
  24309. this.bindingName_ = bindingName;
  24310. this.exportName_ = exportName;
  24311. }
  24312. return ($traceurRuntime.createClass)(InsertBindingAssignmentTransformer, {
  24313. matchesBindingName_: function(binding) {
  24314. return binding.type === IDENTIFIER_EXPRESSION && binding.identifierToken.value === this.bindingName_;
  24315. },
  24316. transformUnaryExpression: function(tree) {
  24317. if (!this.matchesBindingName_(tree.operand))
  24318. return $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformUnaryExpression").call(this, tree);
  24319. var operatorType = tree.operator.type;
  24320. if (operatorType !== PLUS_PLUS && operatorType !== MINUS_MINUS)
  24321. return $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformUnaryExpression").call(this, tree);
  24322. var operand = this.transformAny(tree.operand);
  24323. if (operand !== tree.operand)
  24324. tree = new UnaryExpression(tree.location, tree.operator, operand);
  24325. return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), this.exportName_, tree);
  24326. },
  24327. transformPostfixExpression: function(tree) {
  24328. tree = $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformPostfixExpression").call(this, tree);
  24329. if (!this.matchesBindingName_(tree.operand))
  24330. return tree;
  24331. switch (tree.operator.type) {
  24332. case PLUS_PLUS:
  24333. return parseExpression($traceurRuntime.getTemplateObject(["($__export(", ", ", " + 1), ", ")"]), this.exportName_, tree.operand, tree);
  24334. case MINUS_MINUS:
  24335. return parseExpression($traceurRuntime.getTemplateObject(["($__export(", ", ", " - 1), ", ")"]), this.exportName_, tree.operand, tree);
  24336. }
  24337. return tree;
  24338. },
  24339. transformBinaryExpression: function(tree) {
  24340. tree = $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformBinaryExpression").call(this, tree);
  24341. if (!tree.operator.isAssignmentOperator())
  24342. return tree;
  24343. if (!this.matchesBindingName_(tree.left))
  24344. return tree;
  24345. return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ")}"]), this.exportName_, tree);
  24346. }
  24347. }, {}, $__super);
  24348. }(ScopeTransformer);
  24349. var InstantiateModuleTransformer = function($__super) {
  24350. function InstantiateModuleTransformer(identifierGenerator, reporter) {
  24351. var options = arguments[2];
  24352. $traceurRuntime.superConstructor(InstantiateModuleTransformer).call(this, identifierGenerator, reporter, options);
  24353. this.anonymousModule = options && !options.bundle && options.moduleName !== true;
  24354. this.usesModuleName = false;
  24355. this.inExport_ = false;
  24356. this.curDepIndex_ = null;
  24357. this.dependencies = [];
  24358. this.externalExportBindings = [];
  24359. this.importBindings = [];
  24360. this.localExportBindings = [];
  24361. this.functionDeclarations = [];
  24362. this.moduleBindings = [];
  24363. this.exportStarBindings = [];
  24364. }
  24365. return ($traceurRuntime.createClass)(InstantiateModuleTransformer, {
  24366. getModuleName: function(tree) {
  24367. if (this.anonymousModule)
  24368. return null;
  24369. return tree.moduleName;
  24370. },
  24371. moduleProlog: function() {
  24372. return [];
  24373. },
  24374. wrapModule: function(statements) {
  24375. var prolog = [createUseStrictDirective()];
  24376. statements = prolog.concat(statements);
  24377. if (this.usesModuleName) {
  24378. if (this.moduleName) {
  24379. return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ",\n ", ", function($__export, $__moduleContext) {\n ", "\n });"]), this.moduleName, this.dependencies, statements);
  24380. }
  24381. return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ", function($__export, $__moduleContext) {\n ", "\n });"]), this.dependencies, statements);
  24382. }
  24383. if (this.moduleName) {
  24384. return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ",\n ", ", function($__export) {\n ", "\n });"]), this.moduleName, this.dependencies, statements);
  24385. }
  24386. return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ", function($__export) {\n ", "\n });"]), this.dependencies, statements);
  24387. },
  24388. addExportStatement: function(statements) {
  24389. var $__6 = this;
  24390. var declarationExtractionTransformer = new DeclarationExtractionTransformer();
  24391. var moduleNameIdentifierTransformer = new ModuleNameIdentifierTransformer();
  24392. statements = moduleNameIdentifierTransformer.transformList(statements);
  24393. if (moduleNameIdentifierTransformer.usesModuleName)
  24394. this.usesModuleName = true;
  24395. this.localExportBindings.forEach(function(binding) {
  24396. statements = new InsertBindingAssignmentTransformer(binding.exportName, binding.localName).transformList(statements);
  24397. });
  24398. var executionStatements = declarationExtractionTransformer.transformList(statements);
  24399. var executionFunction = createFunctionExpression(createEmptyParameterList(), createFunctionBody(executionStatements));
  24400. var declarationStatements = declarationExtractionTransformer.getDeclarationStatements();
  24401. var setterFunctions = this.dependencies.map(function(dep, index) {
  24402. var importBindings = $__6.importBindings[index];
  24403. var externalExportBindings = $__6.externalExportBindings[index];
  24404. var exportStarBinding = $__6.exportStarBindings[index];
  24405. var moduleBinding = $__6.moduleBindings[index];
  24406. var setterStatements = [];
  24407. if (importBindings) {
  24408. importBindings.forEach(function(binding) {
  24409. setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["", " = $__m.", ";"]), id(binding.variableName), binding.exportName));
  24410. });
  24411. }
  24412. if (externalExportBindings) {
  24413. var reexports = Object.create(null);
  24414. externalExportBindings.forEach(function($__7) {
  24415. var $__8 = $__7,
  24416. exportName = $__8.exportName,
  24417. importName = $__8.importName;
  24418. reexports[exportName] = importName === null ? parseExpression($traceurRuntime.getTemplateObject(["$__m"])) : parseExpression($traceurRuntime.getTemplateObject(["$__m.", ""]), importName);
  24419. });
  24420. setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["$__export(", ")"]), createObjectLiteralForDescriptor(reexports)));
  24421. }
  24422. if (moduleBinding) {
  24423. setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["", " = $__m;"]), id(moduleBinding)));
  24424. }
  24425. if (exportStarBinding) {
  24426. setterStatements = setterStatements.concat(parseStatements($traceurRuntime.getTemplateObject(["\n var exportObj = Object.create(null);\n Object.keys($__m).forEach(function(p) {\n if (p !== 'default' && !$__exportNames[p])\n exportObj[p] = $__m[p];\n });\n $__export(exportObj);\n "])));
  24427. var exportNames = {};
  24428. $__6.localExportBindings.concat($__6.externalExportBindings).forEach(function(binding) {
  24429. exportNames[binding.exportName] = true;
  24430. });
  24431. declarationStatements.push(parseStatement($traceurRuntime.getTemplateObject(["\n var $__exportNames = ", ";\n "]), createObjectLiteralForDescriptor(exportNames)));
  24432. }
  24433. if (setterStatements.length) {
  24434. return parseExpression($traceurRuntime.getTemplateObject(["function($__m) {\n ", "\n }"]), setterStatements);
  24435. }
  24436. return parseExpression($traceurRuntime.getTemplateObject(["function($__m) {}"]));
  24437. });
  24438. declarationStatements = declarationStatements.concat(this.functionDeclarations.map(function(binding) {
  24439. return parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), binding.exportName, id(binding.functionName));
  24440. }));
  24441. declarationStatements.push(parseStatement($traceurRuntime.getTemplateObject(["return {\n setters: ", ",\n execute: ", "\n }"]), new ArrayLiteral(null, setterFunctions), executionFunction));
  24442. return declarationStatements;
  24443. },
  24444. addLocalExportBinding: function(exportName) {
  24445. var localName = arguments[1] !== (void 0) ? arguments[1] : exportName;
  24446. this.localExportBindings.push({
  24447. exportName: exportName,
  24448. localName: localName
  24449. });
  24450. },
  24451. addImportBinding: function(depIndex, variableName, exportName) {
  24452. this.importBindings[depIndex] = this.importBindings[depIndex] || [];
  24453. this.importBindings[depIndex].push({
  24454. variableName: variableName,
  24455. exportName: exportName
  24456. });
  24457. },
  24458. addExternalExportBinding: function(depIndex, exportName, importName) {
  24459. this.externalExportBindings[depIndex] = this.externalExportBindings[depIndex] || [];
  24460. this.externalExportBindings[depIndex].push({
  24461. exportName: exportName,
  24462. importName: importName
  24463. });
  24464. },
  24465. addExportStarBinding: function(depIndex) {
  24466. this.exportStarBindings[depIndex] = true;
  24467. },
  24468. addModuleBinding: function(depIndex, variableName) {
  24469. this.moduleBindings[depIndex] = variableName;
  24470. },
  24471. addExportFunction: function(exportName) {
  24472. var functionName = arguments[1] !== (void 0) ? arguments[1] : exportName;
  24473. this.functionDeclarations.push({
  24474. exportName: exportName,
  24475. functionName: functionName
  24476. });
  24477. },
  24478. getOrCreateDependencyIndex: function(moduleSpecifier) {
  24479. var name = moduleSpecifier.token.processedValue;
  24480. var depIndex = this.dependencies.indexOf(name);
  24481. if (depIndex === -1) {
  24482. depIndex = this.dependencies.length;
  24483. this.dependencies.push(name);
  24484. }
  24485. return depIndex;
  24486. },
  24487. transformExportDeclaration: function(tree) {
  24488. this.inExport_ = true;
  24489. if (tree.declaration.moduleSpecifier) {
  24490. this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.declaration.moduleSpecifier);
  24491. } else {
  24492. this.curDepIndex_ = null;
  24493. }
  24494. var transformed = this.transformAny(tree.declaration);
  24495. this.inExport_ = false;
  24496. return transformed;
  24497. },
  24498. transformVariableStatement: function(tree) {
  24499. if (!this.inExport_)
  24500. return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformVariableStatement").call(this, tree);
  24501. this.inExport_ = false;
  24502. var bindingVisitor = new ExportBindingsVisitor();
  24503. bindingVisitor.visitAny(tree);
  24504. var statements = [];
  24505. for (var i = 0; i < bindingVisitor.bindings.length; i++) {
  24506. var identifierToken = bindingVisitor.bindings[i].identifierToken;
  24507. var name = identifierToken.value;
  24508. this.addLocalExportBinding(name);
  24509. statements.push(parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), name, id(identifierToken)));
  24510. }
  24511. statements.unshift($traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformAny").call(this, tree));
  24512. return new AnonBlock(null, statements);
  24513. },
  24514. transformExportStar: function(tree) {
  24515. this.inExport_ = false;
  24516. this.addExportStarBinding(this.curDepIndex_);
  24517. return new AnonBlock(null, []);
  24518. },
  24519. transformClassDeclaration: function(tree) {
  24520. if (!this.inExport_)
  24521. return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformClassDeclaration").call(this, tree);
  24522. this.inExport_ = false;
  24523. var identifierToken = tree.name.identifierToken;
  24524. var name = identifierToken.value;
  24525. this.addLocalExportBinding(name);
  24526. var statements = [$traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformClassDeclaration").call(this, tree), parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), name, id(identifierToken))];
  24527. return new AnonBlock(null, statements);
  24528. },
  24529. transformFunctionDeclaration: function(tree) {
  24530. if (this.inExport_) {
  24531. var name = tree.name.getStringValue();
  24532. this.addLocalExportBinding(name);
  24533. this.addExportFunction(name);
  24534. this.inExport_ = false;
  24535. }
  24536. return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  24537. },
  24538. transformNamedExport: function(tree) {
  24539. this.transformAny(tree.moduleSpecifier);
  24540. var exportClause = this.transformAny(tree.exportClause);
  24541. if (this.curDepIndex_ === null) {
  24542. return exportClause;
  24543. }
  24544. return new AnonBlock(null, []);
  24545. },
  24546. transformImportDeclaration: function(tree) {
  24547. this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.moduleSpecifier);
  24548. var initializer = this.transformAny(tree.moduleSpecifier);
  24549. if (!tree.importClause) {
  24550. return new AnonBlock(null, []);
  24551. }
  24552. var importClause = this.transformAny(tree.importClause);
  24553. if (tree.importClause.type === NAME_SPACE_IMPORT) {
  24554. var bindingIdentifier = tree.importClause.binding.binding;
  24555. var name = bindingIdentifier.getStringValue();
  24556. this.addModuleBinding(this.curDepIndex_, name);
  24557. return parseStatement($traceurRuntime.getTemplateObject(["var ", ";"]), bindingIdentifier);
  24558. }
  24559. if (tree.importClause.type === IMPORT_SPECIFIER_SET) {
  24560. return importClause;
  24561. }
  24562. var bindingName = tree.importClause.binding.getStringValue();
  24563. this.addImportBinding(this.curDepIndex_, bindingName, 'default');
  24564. return parseStatement($traceurRuntime.getTemplateObject(["var ", ";"]), bindingName);
  24565. },
  24566. transformImportSpecifierSet: function(tree) {
  24567. return createVariableStatement(createVariableDeclarationList(VAR, this.transformList(tree.specifiers)));
  24568. },
  24569. transformExportDefault: function(tree) {
  24570. this.inExport_ = false;
  24571. var expression = this.transformAny(tree.expression);
  24572. this.addLocalExportBinding('default');
  24573. if (expression.type === CLASS_DECLARATION) {
  24574. expression = new ClassExpression(expression.location, expression.name, expression.superClass, expression.elements, expression.annotations, expression.typeParameters);
  24575. }
  24576. if (expression.type === FUNCTION_DECLARATION) {
  24577. this.addExportFunction('default', expression.name.identifierToken.value);
  24578. return expression;
  24579. } else {
  24580. return parseStatement($traceurRuntime.getTemplateObject(["$__export('default', ", ");"]), expression);
  24581. }
  24582. },
  24583. transformExportSpecifier: function(tree) {
  24584. var exportName;
  24585. var bindingName;
  24586. if (tree.rhs) {
  24587. exportName = tree.rhs.value;
  24588. bindingName = tree.lhs.value;
  24589. } else {
  24590. exportName = tree.lhs.value;
  24591. bindingName = exportName;
  24592. }
  24593. if (this.curDepIndex_ !== null) {
  24594. this.addExternalExportBinding(this.curDepIndex_, exportName, bindingName);
  24595. } else {
  24596. this.addLocalExportBinding(exportName, bindingName);
  24597. return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ");"]), exportName, id(bindingName));
  24598. }
  24599. },
  24600. transformExportSpecifierSet: function(tree) {
  24601. var specifiers = this.transformList(tree.specifiers);
  24602. return new ExpressionStatement(tree.location, new CommaExpression(tree.location, specifiers.filter(function(specifier) {
  24603. return specifier;
  24604. })));
  24605. },
  24606. transformNameSpaceExport: function(tree) {
  24607. this.addExternalExportBinding(this.curDepIndex_, tree.name.value, null);
  24608. return tree;
  24609. },
  24610. transformForwardDefaultExport: function(tree) {
  24611. this.addExternalExportBinding(this.curDepIndex_, tree.name.value, 'default');
  24612. return tree;
  24613. },
  24614. transformImportSpecifier: function(tree) {
  24615. var localBinding = tree.binding.binding;
  24616. var localBindingToken = localBinding.identifierToken;
  24617. var importName = (tree.name || localBindingToken).value;
  24618. this.addImportBinding(this.curDepIndex_, localBindingToken.value, importName);
  24619. return new VariableDeclaration(tree.location, localBinding, null, null);
  24620. },
  24621. transformModuleSpecifier: function(tree) {
  24622. this.curDepIndex_ = this.getOrCreateDependencyIndex(tree);
  24623. return tree;
  24624. }
  24625. }, {}, $__super);
  24626. }(ModuleTransformer);
  24627. return {get InstantiateModuleTransformer() {
  24628. return InstantiateModuleTransformer;
  24629. }};
  24630. });
  24631. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js", [], function() {
  24632. "use strict";
  24633. var __moduleName = "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js";
  24634. var SPREAD_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).SPREAD_EXPRESSION;
  24635. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")),
  24636. createObjectLiteral = $__2.createObjectLiteral,
  24637. createArgumentList = $__2.createArgumentList;
  24638. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).parseExpression;
  24639. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).default;
  24640. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).ParseTreeTransformer;
  24641. function hasSpread(trees) {
  24642. return trees.some(function(tree) {
  24643. return tree && tree.type === SPREAD_EXPRESSION;
  24644. });
  24645. }
  24646. var SpreadPropertiesTransformer = function($__super) {
  24647. function SpreadPropertiesTransformer(identifierGenerator, reporter, options) {
  24648. $traceurRuntime.superConstructor(SpreadPropertiesTransformer).call(this, identifierGenerator, reporter, options);
  24649. this.options = options;
  24650. }
  24651. return ($traceurRuntime.createClass)(SpreadPropertiesTransformer, {transformObjectLiteral: function(tree) {
  24652. if (!hasSpread(tree.propertyNameAndValues)) {
  24653. return $traceurRuntime.superGet(this, SpreadPropertiesTransformer.prototype, "transformObjectLiteral").call(this, tree);
  24654. }
  24655. var properties = this.transformList(tree.propertyNameAndValues);
  24656. return spreadProperties(properties, this);
  24657. }}, {}, $__super);
  24658. }(ImportRuntimeTrait(ParseTreeTransformer));
  24659. function spreadProperties(properties, self) {
  24660. var args = [];
  24661. var accummulatedProps = null;
  24662. for (var i = 0; i < properties.length; i++) {
  24663. var property = properties[i];
  24664. if (property.type === SPREAD_EXPRESSION) {
  24665. if (accummulatedProps) {
  24666. args.push(createObjectLiteral(accummulatedProps));
  24667. accummulatedProps = null;
  24668. }
  24669. args.push(property.expression);
  24670. } else {
  24671. if (!accummulatedProps) {
  24672. accummulatedProps = [];
  24673. }
  24674. accummulatedProps.push(property);
  24675. }
  24676. }
  24677. if (accummulatedProps) {
  24678. args.push(createObjectLiteral(accummulatedProps));
  24679. }
  24680. var runtime = self.getRuntimeExpression('spreadProperties');
  24681. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), runtime, createArgumentList(args));
  24682. }
  24683. return {
  24684. get SpreadPropertiesTransformer() {
  24685. return SpreadPropertiesTransformer;
  24686. },
  24687. get spreadProperties() {
  24688. return spreadProperties;
  24689. }
  24690. };
  24691. });
  24692. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/JsxTransformer.js", [], function() {
  24693. "use strict";
  24694. var __moduleName = "traceur@0.0.112/src/codegeneration/JsxTransformer.js";
  24695. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")),
  24696. JSX_ELEMENT = $__4.JSX_ELEMENT,
  24697. JSX_PLACEHOLDER = $__4.JSX_PLACEHOLDER,
  24698. JSX_SPREAD_ATTRIBUTE = $__4.JSX_SPREAD_ATTRIBUTE,
  24699. JSX_TEXT = $__4.JSX_TEXT,
  24700. LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION;
  24701. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")),
  24702. JsxText = $__5.JsxText,
  24703. LiteralExpression = $__5.LiteralExpression,
  24704. LiteralPropertyName = $__5.LiteralPropertyName,
  24705. SpreadExpression = $__5.SpreadExpression;
  24706. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).LiteralToken;
  24707. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).ParseTreeTransformer;
  24708. var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).STRING;
  24709. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")),
  24710. createArgumentList = $__9.createArgumentList,
  24711. createIdentifierExpression = $__9.createIdentifierExpression,
  24712. createIdentifierToken = $__9.createIdentifierToken,
  24713. createMemberExpression = $__9.createMemberExpression,
  24714. createNullLiteral = $__9.createNullLiteral,
  24715. createObjectLiteral = $__9.createObjectLiteral,
  24716. createPropertyNameAssignment = $__9.createPropertyNameAssignment,
  24717. createStringLiteral = $__9.createStringLiteral,
  24718. createStringLiteralToken = $__9.createStringLiteralToken,
  24719. createTrueLiteral = $__9.createTrueLiteral;
  24720. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).parseExpression;
  24721. var spreadProperties = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).spreadProperties;
  24722. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).default;
  24723. var JsxTransformer = function($__super) {
  24724. function JsxTransformer(idGen, reporter, options) {
  24725. $traceurRuntime.superConstructor(JsxTransformer).call(this);
  24726. this.options = options;
  24727. this.jsxFunction_ = null;
  24728. }
  24729. return ($traceurRuntime.createClass)(JsxTransformer, {
  24730. getJsxFunction_: function() {
  24731. if (!this.jsxFunction_) {
  24732. var jsx = this.options.jsx;
  24733. if (typeof jsx === 'string') {
  24734. this.jsxFunction_ = parseExpression([jsx]);
  24735. } else {
  24736. this.jsxFunction_ = parseExpression($traceurRuntime.getTemplateObject(["React.createElement"]));
  24737. }
  24738. }
  24739. return this.jsxFunction_;
  24740. },
  24741. transformJsxElement: function(tree) {
  24742. var name = this.transformAny(tree.name);
  24743. var props = this.transformJsxAttributes_(tree);
  24744. var children = this.transformJsxChildren_(tree.children);
  24745. var args = createArgumentList($traceurRuntime.spread([name, props], children));
  24746. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), this.getJsxFunction_(), args);
  24747. },
  24748. transformJsxAttributes_: function(tree) {
  24749. var attrs = this.transformList(tree.attributes);
  24750. if (attrs.length === 0) {
  24751. return createNullLiteral();
  24752. }
  24753. if (tree.attributes.some(function(a) {
  24754. return a.type === JSX_SPREAD_ATTRIBUTE;
  24755. })) {
  24756. return spreadProperties(attrs, this);
  24757. }
  24758. return createObjectLiteral(attrs);
  24759. },
  24760. transformJsxElementName: function(tree) {
  24761. if (tree.names.length === 1) {
  24762. var value = tree.names[0].value;
  24763. if (value[0] === value[0].toUpperCase()) {
  24764. return createIdentifierExpression(value);
  24765. ;
  24766. }
  24767. return createStringLiteral(value);
  24768. }
  24769. var names = tree.names.map(jsxIdentifierToToken);
  24770. var operand = names[0];
  24771. if (operand.type === STRING) {
  24772. names[0] = new LiteralExpression(operand.location, operand);
  24773. }
  24774. return createMemberExpression.apply((void 0), $traceurRuntime.spread(names));
  24775. },
  24776. transformJsxAttribute: function(tree) {
  24777. var name = new LiteralPropertyName(tree.name.location, jsxIdentifierToToken(tree.name));
  24778. var value;
  24779. if (tree.value === null) {
  24780. value = createTrueLiteral();
  24781. } else if (tree.value.type === LITERAL_EXPRESSION) {
  24782. var literalToken = tree.value.literalToken;
  24783. var v = literalToken.value;
  24784. var location = literalToken.location;
  24785. var lit = new LiteralToken(STRING, normalizeAttributeValue(v), location);
  24786. value = new LiteralExpression(location, lit);
  24787. } else {
  24788. value = this.transformAny(tree.value);
  24789. }
  24790. return createPropertyNameAssignment(name, value);
  24791. },
  24792. transformJsxPlaceholder: function(tree) {
  24793. return this.transformAny(tree.expression);
  24794. },
  24795. transformJsxSpreadAttribute: function(tree) {
  24796. return new SpreadExpression(tree.location, this.transformAny(tree.expression));
  24797. },
  24798. transformJsxText: function(tree) {
  24799. return createStringLiteral(tree.value.value);
  24800. },
  24801. transformJsxChildren_: function(trees) {
  24802. var $__1 = this;
  24803. var rv = [];
  24804. trees.forEach(function(tree) {
  24805. var newTree;
  24806. switch (tree.type) {
  24807. case JSX_ELEMENT:
  24808. newTree = $__1.transformAny(tree);
  24809. break;
  24810. case JSX_PLACEHOLDER:
  24811. if (tree.expression === null) {
  24812. return;
  24813. }
  24814. newTree = $__1.transformAny(tree);
  24815. break;
  24816. case JSX_TEXT:
  24817. {
  24818. var s = tree.value.value;
  24819. s = s.replace(/\t/g, ' ');
  24820. if (!/[\n\r]/.test(s)) {
  24821. newTree = createStringLiteral(s);
  24822. } else {
  24823. s = s.replace(/^[ \t]*[\n\r]\s*/, '');
  24824. s = s.replace(/[ \t]*[\n\r]\s*$/, '');
  24825. if (s === '') {
  24826. return;
  24827. }
  24828. newTree = createStringLiteral(s);
  24829. }
  24830. break;
  24831. }
  24832. }
  24833. rv.push(newTree);
  24834. });
  24835. return rv;
  24836. }
  24837. }, {}, $__super);
  24838. }(ImportRuntimeTrait(ParseTreeTransformer));
  24839. function jsxIdentifierToToken(token) {
  24840. var value = token.value;
  24841. if (value.indexOf('-') !== -1) {
  24842. return createStringLiteralToken(value);
  24843. }
  24844. return createIdentifierToken(value);
  24845. }
  24846. function normalizeAttributeValue(s) {
  24847. return JSON.stringify(s.slice(1, -1).replace(/\n\s+/g, ' '));
  24848. }
  24849. return {get JsxTransformer() {
  24850. return JsxTransformer;
  24851. }};
  24852. });
  24853. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js", [], function() {
  24854. "use strict";
  24855. var __moduleName = "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js";
  24856. var Method = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).Method;
  24857. var SUPER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).SUPER_EXPRESSION;
  24858. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).ParseTreeTransformer;
  24859. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")),
  24860. createCommaExpression = $__4.createCommaExpression,
  24861. createExpressionStatement = $__4.createExpressionStatement,
  24862. createFunctionBody = $__4.createFunctionBody,
  24863. createParenExpression = $__4.createParenExpression,
  24864. createThisExpression = $__4.createThisExpression;
  24865. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).prependStatements;
  24866. function transformConstructor(constructor, initExpression, superClass) {
  24867. if (superClass) {
  24868. var transformer = new SuperCallTransformer(initExpression);
  24869. return transformer.transformAny(constructor);
  24870. }
  24871. var statements = constructor.body.statements;
  24872. var initStatement = createExpressionStatement(initExpression);
  24873. statements = prependStatements(statements, initStatement);
  24874. return new Method(constructor.location, false, constructor.functionKind, constructor.name, constructor.parameterList, constructor.typeAnnotation, constructor.annotations, createFunctionBody(statements), constructor.debugName);
  24875. }
  24876. var SuperCallTransformer = function($__super) {
  24877. function SuperCallTransformer(expression) {
  24878. $traceurRuntime.superConstructor(SuperCallTransformer).call(this);
  24879. this.expression = expression;
  24880. }
  24881. return ($traceurRuntime.createClass)(SuperCallTransformer, {
  24882. transformCallExpression: function(tree) {
  24883. if (tree.operand.type === SUPER_EXPRESSION) {
  24884. var thisExpression = createThisExpression();
  24885. return createParenExpression(createCommaExpression([tree, this.expression, thisExpression]));
  24886. }
  24887. return $traceurRuntime.superGet(this, SuperCallTransformer.prototype, "transformCallExpression").call(this, tree);
  24888. },
  24889. transformClassDeclaration: function(tree) {
  24890. return tree;
  24891. },
  24892. transformClassExpression: function(tree) {
  24893. return tree;
  24894. }
  24895. }, {}, $__super);
  24896. }(ParseTreeTransformer);
  24897. return {get transformConstructor() {
  24898. return transformConstructor;
  24899. }};
  24900. });
  24901. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js", [], function() {
  24902. "use strict";
  24903. var __moduleName = "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js";
  24904. var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).CONSTRUCTOR;
  24905. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")),
  24906. AnonBlock = $__5.AnonBlock,
  24907. ClassDeclaration = $__5.ClassDeclaration,
  24908. ClassExpression = $__5.ClassExpression,
  24909. FormalParameterList = $__5.FormalParameterList,
  24910. IdentifierExpression = $__5.IdentifierExpression,
  24911. Method = $__5.Method,
  24912. ReturnStatement = $__5.ReturnStatement;
  24913. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")),
  24914. GET_ACCESSOR = $__6.GET_ACCESSOR,
  24915. METHOD = $__6.METHOD,
  24916. PROPERTY_VARIABLE_DECLARATION = $__6.PROPERTY_VARIABLE_DECLARATION,
  24917. SET_ACCESSOR = $__6.SET_ACCESSOR;
  24918. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).TempVarTransformer;
  24919. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")),
  24920. createCommaExpression = $__8.createCommaExpression,
  24921. createFunctionBody = $__8.createFunctionBody,
  24922. createIdentifierToken = $__8.createIdentifierToken,
  24923. createImmediatelyInvokedFunctionExpression = $__8.createImmediatelyInvokedFunctionExpression,
  24924. createLiteralPropertyName = $__8.createLiteralPropertyName,
  24925. createRestParameter = $__8.createRestParameter;
  24926. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")),
  24927. parsePropertyDefinition = $__9.parsePropertyDefinition,
  24928. parseStatement = $__9.parseStatement;
  24929. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).parseExpression;
  24930. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).prependStatements;
  24931. var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).propName;
  24932. var transformConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableConstructorTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).transformConstructor;
  24933. var MemberVariableTransformer = function($__super) {
  24934. function MemberVariableTransformer() {
  24935. $traceurRuntime.superConstructor(MemberVariableTransformer).apply(this, arguments);
  24936. }
  24937. return ($traceurRuntime.createClass)(MemberVariableTransformer, {
  24938. transformClassElements_: function(tree) {
  24939. var $__2 = this;
  24940. var elements = [];
  24941. var initInstanceVars = [],
  24942. initStaticVars = [];
  24943. var constructor;
  24944. var constructorIndex = 0;
  24945. tree.elements.forEach(function(tree) {
  24946. var initVars;
  24947. if (tree.isStatic) {
  24948. initVars = initStaticVars;
  24949. } else {
  24950. initVars = initInstanceVars;
  24951. }
  24952. switch (tree.type) {
  24953. case GET_ACCESSOR:
  24954. case SET_ACCESSOR:
  24955. elements.push($__2.transformAny(tree));
  24956. break;
  24957. case METHOD:
  24958. if (!tree.isStatic && propName(tree) === CONSTRUCTOR) {
  24959. constructor = tree;
  24960. constructorIndex = elements.length;
  24961. } else {
  24962. elements.push($__2.transformAny(tree));
  24963. }
  24964. break;
  24965. case PROPERTY_VARIABLE_DECLARATION:
  24966. tree = $__2.transformAny(tree);
  24967. if (tree.initializer !== null) {
  24968. initVars.push(tree);
  24969. }
  24970. break;
  24971. default:
  24972. throw new Error(("Unexpected class element: " + tree.type));
  24973. }
  24974. });
  24975. if (initInstanceVars.length > 0) {
  24976. var initExpression = getInstanceInitExpression(initInstanceVars);
  24977. if (!constructor) {
  24978. constructor = this.getDefaultConstructor_(tree);
  24979. }
  24980. constructor = transformConstructor(constructor, initExpression, tree.superClass);
  24981. }
  24982. if (constructor) {
  24983. elements.splice(constructorIndex, 0, constructor);
  24984. }
  24985. return {
  24986. elements: elements,
  24987. initStaticVars: initStaticVars
  24988. };
  24989. },
  24990. transformClassDeclaration: function(tree) {
  24991. var $__3 = this.transformClassElements_(tree),
  24992. elements = $__3.elements,
  24993. initStaticVars = $__3.initStaticVars;
  24994. var superClass = this.transformAny(tree.superClass);
  24995. var classDecl = new ClassDeclaration(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters);
  24996. if (initStaticVars.length === 0) {
  24997. return classDecl;
  24998. }
  24999. var statements = createStaticInitializerStatements(tree.name.identifierToken, initStaticVars);
  25000. statements = prependStatements(statements, classDecl);
  25001. return new AnonBlock(null, statements);
  25002. },
  25003. transformClassExpression: function(tree) {
  25004. var $__3 = this.transformClassElements_(tree),
  25005. elements = $__3.elements,
  25006. initStaticVars = $__3.initStaticVars;
  25007. var superClass = this.transformAny(tree.superClass);
  25008. var classExpression = new ClassExpression(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters);
  25009. if (initStaticVars.length === 0) {
  25010. return classExpression;
  25011. }
  25012. this.pushTempScope();
  25013. var id = this.getTempIdentifier();
  25014. var idToken = createIdentifierToken(id);
  25015. var idExpression = new IdentifierExpression(idToken.location, idToken);
  25016. var statements = $traceurRuntime.spread([parseStatement($traceurRuntime.getTemplateObject(["let ", " = ", ""]), id, classExpression)], createStaticInitializerStatements(idToken, initStaticVars), [new ReturnStatement(null, idExpression)]);
  25017. var body = createFunctionBody(statements);
  25018. this.popTempScope();
  25019. return createImmediatelyInvokedFunctionExpression(body);
  25020. },
  25021. getDefaultConstructor_: function(tree) {
  25022. if (tree.superClass) {
  25023. var param = createRestParameter(createIdentifierToken('args'));
  25024. var paramList = new FormalParameterList(null, [param]);
  25025. var body = createFunctionBody([parseStatement($traceurRuntime.getTemplateObject(["super(...args)"]))]);
  25026. var name = createLiteralPropertyName(CONSTRUCTOR);
  25027. return new Method(tree.location, false, null, name, paramList, null, [], body, null);
  25028. }
  25029. return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {}"]));
  25030. }
  25031. }, {}, $__super);
  25032. }(TempVarTransformer);
  25033. function createStaticInitializerStatements(idToken, initStaticMemberVars) {
  25034. var className = new IdentifierExpression(idToken.location, idToken);
  25035. return initStaticMemberVars.map(function(mv) {
  25036. var propName = mv.name.literalToken.value;
  25037. return parseStatement($traceurRuntime.getTemplateObject(["Object.defineProperty(", ", ", ", {enumerable: true,\n configurable: true, value: ", ", writable: true})"]), className, propName, mv.initializer);
  25038. });
  25039. }
  25040. function getInstanceInitExpression(initInstanceVars) {
  25041. var expressions = initInstanceVars.map(function(mv) {
  25042. var name = mv.name.literalToken;
  25043. return parseExpression($traceurRuntime.getTemplateObject(["this.", " = ", ""]), name, mv.initializer);
  25044. });
  25045. return createCommaExpression(expressions);
  25046. }
  25047. return {get MemberVariableTransformer() {
  25048. return MemberVariableTransformer;
  25049. }};
  25050. });
  25051. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js", [], function() {
  25052. "use strict";
  25053. var __moduleName = "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js";
  25054. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")),
  25055. BLOCK = $__4.BLOCK,
  25056. CLASS_DECLARATION = $__4.CLASS_DECLARATION,
  25057. FUNCTION_DECLARATION = $__4.FUNCTION_DECLARATION,
  25058. IF_STATEMENT = $__4.IF_STATEMENT,
  25059. LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION,
  25060. POSTFIX_EXPRESSION = $__4.POSTFIX_EXPRESSION,
  25061. UNARY_EXPRESSION = $__4.UNARY_EXPRESSION;
  25062. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")).ParseTreeVisitor;
  25063. var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")),
  25064. AS = $__6.AS,
  25065. ASYNC = $__6.ASYNC,
  25066. AWAIT = $__6.AWAIT,
  25067. FROM = $__6.FROM,
  25068. GET = $__6.GET,
  25069. OF = $__6.OF,
  25070. ON = $__6.ON,
  25071. SET = $__6.SET,
  25072. TYPE = $__6.TYPE;
  25073. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Scanner.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")),
  25074. isIdentifierPart = $__7.isIdentifierPart,
  25075. isWhitespace = $__7.isWhitespace;
  25076. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")),
  25077. ARROW = $__8.ARROW,
  25078. AT = $__8.AT,
  25079. BACK_QUOTE = $__8.BACK_QUOTE,
  25080. BAR = $__8.BAR,
  25081. BREAK = $__8.BREAK,
  25082. CASE = $__8.CASE,
  25083. CATCH = $__8.CATCH,
  25084. CLASS = $__8.CLASS,
  25085. CLOSE_ANGLE = $__8.CLOSE_ANGLE,
  25086. CLOSE_CURLY = $__8.CLOSE_CURLY,
  25087. CLOSE_PAREN = $__8.CLOSE_PAREN,
  25088. CLOSE_SQUARE = $__8.CLOSE_SQUARE,
  25089. COLON = $__8.COLON,
  25090. COMMA = $__8.COMMA,
  25091. CONTINUE = $__8.CONTINUE,
  25092. DEBUGGER = $__8.DEBUGGER,
  25093. DEFAULT = $__8.DEFAULT,
  25094. DO = $__8.DO,
  25095. DOT_DOT_DOT = $__8.DOT_DOT_DOT,
  25096. ELSE = $__8.ELSE,
  25097. EQUAL = $__8.EQUAL,
  25098. EXPORT = $__8.EXPORT,
  25099. EXTENDS = $__8.EXTENDS,
  25100. FINALLY = $__8.FINALLY,
  25101. FOR = $__8.FOR,
  25102. FUNCTION = $__8.FUNCTION,
  25103. IF = $__8.IF,
  25104. IMPORT = $__8.IMPORT,
  25105. IN = $__8.IN,
  25106. INTERFACE = $__8.INTERFACE,
  25107. MINUS = $__8.MINUS,
  25108. MINUS_MINUS = $__8.MINUS_MINUS,
  25109. NEW = $__8.NEW,
  25110. NUMBER = $__8.NUMBER,
  25111. OPEN_ANGLE = $__8.OPEN_ANGLE,
  25112. OPEN_CURLY = $__8.OPEN_CURLY,
  25113. OPEN_PAREN = $__8.OPEN_PAREN,
  25114. OPEN_SQUARE = $__8.OPEN_SQUARE,
  25115. PERIOD = $__8.PERIOD,
  25116. PLUS = $__8.PLUS,
  25117. PLUS_PLUS = $__8.PLUS_PLUS,
  25118. QUESTION = $__8.QUESTION,
  25119. RETURN = $__8.RETURN,
  25120. SEMI_COLON = $__8.SEMI_COLON,
  25121. SLASH = $__8.SLASH,
  25122. STAR = $__8.STAR,
  25123. STATIC = $__8.STATIC,
  25124. SUPER = $__8.SUPER,
  25125. SWITCH = $__8.SWITCH,
  25126. THIS = $__8.THIS,
  25127. THROW = $__8.THROW,
  25128. TRY = $__8.TRY,
  25129. WHILE = $__8.WHILE,
  25130. WITH = $__8.WITH,
  25131. YIELD = $__8.YIELD;
  25132. var NEW_LINE = '\n';
  25133. var LINE_LENGTH = 80;
  25134. var ParseTreeWriter = function($__super) {
  25135. function ParseTreeWriter() {
  25136. var $__3;
  25137. var $__2 = arguments[0] !== (void 0) ? arguments[0] : {},
  25138. prettyPrint = ($__3 = $__2.prettyPrint) === void 0 ? true : $__3;
  25139. $traceurRuntime.superConstructor(ParseTreeWriter).call(this);
  25140. this.prettyPrint_ = prettyPrint;
  25141. this.result_ = '';
  25142. this.currentLine_ = '';
  25143. this.lastCode_ = -1;
  25144. this.indentDepth_ = 0;
  25145. this.currentParameterTypeAnnotation_ = null;
  25146. }
  25147. return ($traceurRuntime.createClass)(ParseTreeWriter, {
  25148. toString: function() {
  25149. if (this.currentLine_.length > 0) {
  25150. this.result_ += this.currentLine_;
  25151. this.currentLine_ = '';
  25152. this.lastCode_ = -1;
  25153. }
  25154. return this.result_;
  25155. },
  25156. visitAnnotation: function(tree) {
  25157. this.write_(AT);
  25158. this.visitAny(tree.name);
  25159. if (tree.args !== null) {
  25160. this.write_(OPEN_PAREN);
  25161. this.writeList_(tree.args.args, COMMA, false);
  25162. this.write_(CLOSE_PAREN);
  25163. }
  25164. },
  25165. visitArgumentList: function(tree) {
  25166. this.write_(OPEN_PAREN);
  25167. this.writeList_(tree.args, COMMA, false);
  25168. this.write_(CLOSE_PAREN);
  25169. },
  25170. visitArrayComprehension: function(tree) {
  25171. this.write_(OPEN_SQUARE);
  25172. this.visitList(tree.comprehensionList);
  25173. this.visitAny(tree.expression);
  25174. this.write_(CLOSE_SQUARE);
  25175. },
  25176. visitArrayLiteral: function(tree) {
  25177. this.write_(OPEN_SQUARE);
  25178. this.writeList_(tree.elements, COMMA, false);
  25179. if (tree.elements[tree.elements.length - 1] === null) {
  25180. this.write_(COMMA);
  25181. this.writeSpace_();
  25182. }
  25183. this.write_(CLOSE_SQUARE);
  25184. },
  25185. visitArrayPattern: function(tree) {
  25186. this.write_(OPEN_SQUARE);
  25187. this.writeList_(tree.elements, COMMA, false);
  25188. if (tree.elements[tree.elements.length - 1] === null) {
  25189. this.write_(COMMA);
  25190. this.writeSpace_();
  25191. }
  25192. this.write_(CLOSE_SQUARE);
  25193. },
  25194. visitArrayType: function(tree) {
  25195. this.visitAny(tree.elementType);
  25196. this.write_(OPEN_SQUARE);
  25197. this.write_(CLOSE_SQUARE);
  25198. },
  25199. visitArrowFunction: function(tree) {
  25200. if (tree.functionKind) {
  25201. this.writeToken_(tree.functionKind);
  25202. this.writeSpace_();
  25203. }
  25204. this.write_(OPEN_PAREN);
  25205. this.visitAny(tree.parameterList);
  25206. this.write_(CLOSE_PAREN);
  25207. this.writeSpace_();
  25208. this.write_(ARROW);
  25209. this.writeSpace_();
  25210. this.visitAny(tree.body);
  25211. },
  25212. visitAssignmentElement: function(tree) {
  25213. this.visitAny(tree.assignment);
  25214. if (tree.initializer) {
  25215. this.writeSpace_();
  25216. this.write_(EQUAL);
  25217. this.writeSpace_();
  25218. this.visitAny(tree.initializer);
  25219. }
  25220. },
  25221. visitAwaitExpression: function(tree) {
  25222. this.write_(AWAIT);
  25223. this.writeSpace_();
  25224. this.visitAny(tree.expression);
  25225. },
  25226. visitBinaryExpression: function(tree) {
  25227. var left = tree.left;
  25228. this.visitAny(left);
  25229. var operator = tree.operator;
  25230. if (left.type === POSTFIX_EXPRESSION && requiresSpaceBetween(left.operator.type, operator.type)) {
  25231. this.writeRequiredSpace_();
  25232. } else {
  25233. this.writeSpace_();
  25234. }
  25235. this.writeToken_(operator);
  25236. var right = tree.right;
  25237. if (right.type === UNARY_EXPRESSION && requiresSpaceBetween(operator.type, right.operator.type)) {
  25238. this.writeRequiredSpace_();
  25239. } else {
  25240. this.writeSpace_();
  25241. }
  25242. this.visitAny(right);
  25243. },
  25244. visitBindingElement: function(tree) {
  25245. var typeAnnotation = this.currentParameterTypeAnnotation_;
  25246. this.currentParameterTypeAnnotation_ = null;
  25247. this.visitAny(tree.binding);
  25248. this.writeTypeAnnotation_(typeAnnotation);
  25249. if (tree.initializer) {
  25250. this.writeSpace_();
  25251. this.write_(EQUAL);
  25252. this.writeSpace_();
  25253. this.visitAny(tree.initializer);
  25254. }
  25255. },
  25256. visitBindingIdentifier: function(tree) {
  25257. this.writeToken_(tree.identifierToken);
  25258. },
  25259. visitBlock: function(tree) {
  25260. this.writeOpenCurly_();
  25261. this.writelnList_(tree.statements, null);
  25262. this.writeCloseCurly_();
  25263. },
  25264. visitBreakStatement: function(tree) {
  25265. this.write_(BREAK);
  25266. if (tree.name !== null) {
  25267. this.writeSpace_();
  25268. this.writeToken_(tree.name);
  25269. }
  25270. this.write_(SEMI_COLON);
  25271. },
  25272. visitCallExpression: function(tree) {
  25273. this.visitAny(tree.operand);
  25274. this.visitAny(tree.args);
  25275. },
  25276. visitCallSignature: function(tree) {
  25277. if (tree.typeParameters) {
  25278. this.visitAny(tree.typeParameters);
  25279. }
  25280. this.write_(OPEN_PAREN);
  25281. this.visitAny(tree.parameterList);
  25282. this.write_(CLOSE_PAREN);
  25283. this.writeTypeAnnotation_(tree.returnType);
  25284. },
  25285. visitCaseClause: function(tree) {
  25286. this.write_(CASE);
  25287. this.writeSpace_();
  25288. this.visitAny(tree.expression);
  25289. this.write_(COLON);
  25290. this.indentDepth_++;
  25291. this.writelnList_(tree.statements, null);
  25292. this.indentDepth_--;
  25293. },
  25294. visitCatch: function(tree) {
  25295. this.write_(CATCH);
  25296. this.writeSpace_();
  25297. this.write_(OPEN_PAREN);
  25298. this.visitAny(tree.binding);
  25299. this.write_(CLOSE_PAREN);
  25300. this.writeSpace_();
  25301. this.visitAny(tree.catchBody);
  25302. },
  25303. visitClassShared_: function(tree) {
  25304. this.writeAnnotations_(tree.annotations);
  25305. this.write_(CLASS);
  25306. this.writeSpace_();
  25307. this.visitAny(tree.name);
  25308. if (tree.typeParameters !== null) {
  25309. this.visitAny(tree.typeParameters);
  25310. }
  25311. if (tree.superClass !== null) {
  25312. this.writeSpace_();
  25313. this.write_(EXTENDS);
  25314. this.writeSpace_();
  25315. this.visitAny(tree.superClass);
  25316. }
  25317. this.writeSpace_();
  25318. this.writeOpenCurly_();
  25319. this.writelnList_(tree.elements, null);
  25320. this.writeCloseCurly_();
  25321. },
  25322. visitClassDeclaration: function(tree) {
  25323. this.visitClassShared_(tree);
  25324. },
  25325. visitClassExpression: function(tree) {
  25326. this.visitClassShared_(tree);
  25327. },
  25328. visitCommaExpression: function(tree) {
  25329. this.writeList_(tree.expressions, COMMA, false);
  25330. },
  25331. visitComprehensionFor: function(tree) {
  25332. this.write_(FOR);
  25333. this.writeSpace_();
  25334. this.write_(OPEN_PAREN);
  25335. this.visitAny(tree.left);
  25336. this.writeSpace_();
  25337. this.write_(OF);
  25338. this.writeSpace_();
  25339. this.visitAny(tree.iterator);
  25340. this.write_(CLOSE_PAREN);
  25341. this.writeSpace_();
  25342. },
  25343. visitComprehensionIf: function(tree) {
  25344. this.write_(IF);
  25345. this.writeSpace_();
  25346. this.write_(OPEN_PAREN);
  25347. this.visitAny(tree.expression);
  25348. this.write_(CLOSE_PAREN);
  25349. this.writeSpace_();
  25350. },
  25351. visitComputedPropertyName: function(tree) {
  25352. this.write_(OPEN_SQUARE);
  25353. this.visitAny(tree.expression);
  25354. this.write_(CLOSE_SQUARE);
  25355. },
  25356. visitConstructSignature: function(tree) {
  25357. this.write_(NEW);
  25358. this.writeSpace_();
  25359. this.visitCallSignature(tree);
  25360. },
  25361. visitConstructorType: function(tree) {
  25362. this.write_(NEW);
  25363. this.writeSpace_();
  25364. this.visitFunctionType(tree);
  25365. },
  25366. visitConditionalExpression: function(tree) {
  25367. this.visitAny(tree.condition);
  25368. this.writeSpace_();
  25369. this.write_(QUESTION);
  25370. this.writeSpace_();
  25371. this.visitAny(tree.left);
  25372. this.writeSpace_();
  25373. this.write_(COLON);
  25374. this.writeSpace_();
  25375. this.visitAny(tree.right);
  25376. },
  25377. visitContinueStatement: function(tree) {
  25378. this.write_(CONTINUE);
  25379. if (tree.name !== null) {
  25380. this.writeSpace_();
  25381. this.writeToken_(tree.name);
  25382. }
  25383. this.write_(SEMI_COLON);
  25384. },
  25385. visitCoverInitializedName: function(tree) {
  25386. this.writeToken_(tree.name);
  25387. this.writeSpace_();
  25388. this.writeToken_(tree.equalToken);
  25389. this.writeSpace_();
  25390. this.visitAny(tree.initializer);
  25391. },
  25392. visitDebuggerStatement: function(tree) {
  25393. this.write_(DEBUGGER);
  25394. this.write_(SEMI_COLON);
  25395. },
  25396. visitDefaultClause: function(tree) {
  25397. this.write_(DEFAULT);
  25398. this.write_(COLON);
  25399. this.indentDepth_++;
  25400. this.writelnList_(tree.statements, null);
  25401. this.indentDepth_--;
  25402. },
  25403. visitDoWhileStatement: function(tree) {
  25404. this.write_(DO);
  25405. this.visitAnyBlockOrIndent_(tree.body);
  25406. this.writeSpace_();
  25407. this.write_(WHILE);
  25408. this.writeSpace_();
  25409. this.write_(OPEN_PAREN);
  25410. this.visitAny(tree.condition);
  25411. this.write_(CLOSE_PAREN);
  25412. this.write_(SEMI_COLON);
  25413. },
  25414. visitEmptyStatement: function(tree) {
  25415. this.write_(SEMI_COLON);
  25416. },
  25417. visitExportDeclaration: function(tree) {
  25418. this.writeAnnotations_(tree.annotations);
  25419. this.write_(EXPORT);
  25420. this.writeSpace_();
  25421. this.visitAny(tree.declaration);
  25422. },
  25423. visitExportDefault: function(tree) {
  25424. this.write_(DEFAULT);
  25425. this.writeSpace_();
  25426. this.visitAny(tree.expression);
  25427. switch (tree.expression.type) {
  25428. case CLASS_DECLARATION:
  25429. case FUNCTION_DECLARATION:
  25430. break;
  25431. default:
  25432. this.write_(SEMI_COLON);
  25433. }
  25434. },
  25435. visitNameSpaceExport: function(tree) {
  25436. this.write_(STAR);
  25437. this.writeSpace_();
  25438. this.write_(AS);
  25439. this.writeSpace_();
  25440. this.writeToken_(tree.name);
  25441. },
  25442. visitNameSpaceImport: function(tree) {
  25443. this.write_(STAR);
  25444. this.writeSpace_();
  25445. this.write_(AS);
  25446. this.writeSpace_();
  25447. this.visitAny(tree.binding);
  25448. },
  25449. visitNamedExport: function(tree) {
  25450. this.visitAny(tree.exportClause);
  25451. if (tree.moduleSpecifier) {
  25452. this.writeSpace_();
  25453. this.write_(FROM);
  25454. this.writeSpace_();
  25455. this.visitAny(tree.moduleSpecifier);
  25456. }
  25457. this.write_(SEMI_COLON);
  25458. },
  25459. visitExportSpecifier: function(tree) {
  25460. this.writeToken_(tree.lhs);
  25461. if (tree.rhs) {
  25462. this.writeSpace_();
  25463. this.write_(AS);
  25464. this.writeSpace_();
  25465. this.writeToken_(tree.rhs);
  25466. }
  25467. },
  25468. visitExportSpecifierSet: function(tree) {
  25469. this.writeOpenCurly_();
  25470. this.writeList_(tree.specifiers, COMMA, false);
  25471. this.writeCloseCurly_();
  25472. },
  25473. visitExportStar: function(tree) {
  25474. this.write_(STAR);
  25475. },
  25476. visitExpressionStatement: function(tree) {
  25477. this.visitAny(tree.expression);
  25478. this.write_(SEMI_COLON);
  25479. },
  25480. visitFinally: function(tree) {
  25481. this.write_(FINALLY);
  25482. this.writeSpace_();
  25483. this.visitAny(tree.block);
  25484. },
  25485. visitForOfStatement: function(tree) {
  25486. this.write_(FOR);
  25487. this.writeSpace_();
  25488. this.write_(OPEN_PAREN);
  25489. this.visitAny(tree.initializer);
  25490. this.writeSpace_();
  25491. this.write_(OF);
  25492. this.writeSpace_();
  25493. this.visitAny(tree.collection);
  25494. this.write_(CLOSE_PAREN);
  25495. this.visitAnyBlockOrIndent_(tree.body);
  25496. },
  25497. visitForOnStatement: function(tree) {
  25498. this.write_(FOR);
  25499. this.writeSpace_();
  25500. this.write_(OPEN_PAREN);
  25501. this.visitAny(tree.initializer);
  25502. this.writeSpace_();
  25503. this.write_(ON);
  25504. this.writeSpace_();
  25505. this.visitAny(tree.observable);
  25506. this.write_(CLOSE_PAREN);
  25507. this.visitAnyBlockOrIndent_(tree.body);
  25508. },
  25509. visitForInStatement: function(tree) {
  25510. this.write_(FOR);
  25511. this.writeSpace_();
  25512. this.write_(OPEN_PAREN);
  25513. this.visitAny(tree.initializer);
  25514. this.writeSpace_();
  25515. this.write_(IN);
  25516. this.writeSpace_();
  25517. this.visitAny(tree.collection);
  25518. this.write_(CLOSE_PAREN);
  25519. this.visitAnyBlockOrIndent_(tree.body);
  25520. },
  25521. visitForStatement: function(tree) {
  25522. this.write_(FOR);
  25523. this.writeSpace_();
  25524. this.write_(OPEN_PAREN);
  25525. this.visitAny(tree.initializer);
  25526. this.write_(SEMI_COLON);
  25527. this.writeSpace_();
  25528. this.visitAny(tree.condition);
  25529. this.write_(SEMI_COLON);
  25530. this.writeSpace_();
  25531. this.visitAny(tree.increment);
  25532. this.write_(CLOSE_PAREN);
  25533. this.visitAnyBlockOrIndent_(tree.body);
  25534. },
  25535. visitFormalParameterList: function(tree) {
  25536. var first = true;
  25537. for (var i = 0; i < tree.parameters.length; i++) {
  25538. var parameter = tree.parameters[i];
  25539. if (first) {
  25540. first = false;
  25541. } else {
  25542. this.write_(COMMA);
  25543. this.writeSpace_();
  25544. }
  25545. this.visitAny(parameter);
  25546. }
  25547. },
  25548. visitFormalParameter: function(tree) {
  25549. this.writeAnnotations_(tree.annotations, false);
  25550. this.currentParameterTypeAnnotation_ = tree.typeAnnotation;
  25551. this.visitAny(tree.parameter);
  25552. this.currentParameterTypeAnnotation_ = null;
  25553. },
  25554. visitForwardDefaultExport: function(tree) {
  25555. this.writeToken_(tree.name);
  25556. },
  25557. visitFunctionBody: function(tree) {
  25558. this.writeOpenCurly_();
  25559. this.writelnList_(tree.statements, null);
  25560. this.writeCloseCurly_();
  25561. },
  25562. visitFunctionDeclaration: function(tree) {
  25563. this.visitFunction_(tree);
  25564. },
  25565. visitFunctionExpression: function(tree) {
  25566. this.visitFunction_(tree);
  25567. },
  25568. visitFunction_: function(tree) {
  25569. this.writeAnnotations_(tree.annotations);
  25570. if (tree.isAsyncGenerator()) {
  25571. this.write_(ASYNC);
  25572. }
  25573. if (tree.isAsyncFunction())
  25574. this.writeToken_(tree.functionKind);
  25575. this.write_(FUNCTION);
  25576. if (tree.isAsyncGenerator()) {
  25577. this.write_(STAR);
  25578. }
  25579. if (tree.isGenerator())
  25580. this.writeToken_(tree.functionKind);
  25581. if (tree.name) {
  25582. this.writeSpace_();
  25583. this.visitAny(tree.name);
  25584. }
  25585. this.write_(OPEN_PAREN);
  25586. this.visitAny(tree.parameterList);
  25587. this.write_(CLOSE_PAREN);
  25588. this.writeTypeAnnotation_(tree.typeAnnotation);
  25589. this.writeSpace_();
  25590. this.visitAny(tree.body);
  25591. },
  25592. visitFunctionType: function(tree) {
  25593. if (tree.typeParameters !== null) {
  25594. this.visitAny(tree.typeParameters);
  25595. }
  25596. this.write_(OPEN_PAREN);
  25597. this.visitAny(tree.parameterList);
  25598. this.write_(CLOSE_PAREN);
  25599. this.writeSpace_();
  25600. this.write_(ARROW);
  25601. this.writeSpace_();
  25602. this.visitAny(tree.returnType);
  25603. },
  25604. visitGeneratorComprehension: function(tree) {
  25605. this.write_(OPEN_PAREN);
  25606. this.visitList(tree.comprehensionList);
  25607. this.visitAny(tree.expression);
  25608. this.write_(CLOSE_PAREN);
  25609. },
  25610. visitGetAccessor: function(tree) {
  25611. this.writeAnnotations_(tree.annotations);
  25612. if (tree.isStatic) {
  25613. this.write_(STATIC);
  25614. this.writeSpace_();
  25615. }
  25616. this.write_(GET);
  25617. this.writeSpace_();
  25618. this.visitAny(tree.name);
  25619. this.write_(OPEN_PAREN);
  25620. this.write_(CLOSE_PAREN);
  25621. this.writeSpace_();
  25622. this.writeTypeAnnotation_(tree.typeAnnotation);
  25623. this.visitAny(tree.body);
  25624. },
  25625. visitIdentifierExpression: function(tree) {
  25626. this.writeToken_(tree.identifierToken);
  25627. },
  25628. visitIfStatement: function(tree) {
  25629. this.write_(IF);
  25630. this.writeSpace_();
  25631. this.write_(OPEN_PAREN);
  25632. this.visitAny(tree.condition);
  25633. this.write_(CLOSE_PAREN);
  25634. this.visitAnyBlockOrIndent_(tree.ifClause);
  25635. if (tree.elseClause) {
  25636. if (tree.ifClause.type === BLOCK)
  25637. this.writeSpace_();
  25638. this.write_(ELSE);
  25639. if (tree.elseClause.type === IF_STATEMENT) {
  25640. this.writeSpace_();
  25641. this.visitAny(tree.elseClause);
  25642. } else {
  25643. this.visitAnyBlockOrIndent_(tree.elseClause);
  25644. }
  25645. }
  25646. },
  25647. visitIndexSignature: function(tree) {
  25648. this.write_(OPEN_SQUARE);
  25649. this.writeToken_(tree.name);
  25650. this.write_(COLON);
  25651. this.writeSpace_();
  25652. this.visitAny(tree.indexType);
  25653. this.write_(CLOSE_SQUARE);
  25654. this.writeTypeAnnotation_(tree.typeAnnotation);
  25655. this.write_(SEMI_COLON);
  25656. },
  25657. visitInterfaceDeclaration: function(tree) {
  25658. this.write_(INTERFACE);
  25659. this.writeSpace_();
  25660. this.writeToken_(tree.name);
  25661. if (tree.typeParameters) {
  25662. this.visitAny(tree.typeParameters);
  25663. }
  25664. if (tree.extendsClause.length > 0) {
  25665. this.writeSpace_();
  25666. this.write_(EXTENDS);
  25667. this.writeSpace_();
  25668. this.writeList_(tree.extendsClause, COMMA, false);
  25669. }
  25670. this.writeSpace_();
  25671. this.visitAny(tree.objectType);
  25672. },
  25673. visitAnyBlockOrIndent_: function(tree) {
  25674. if (tree.type === BLOCK) {
  25675. this.writeSpace_();
  25676. this.visitAny(tree);
  25677. } else {
  25678. this.visitAnyIndented_(tree);
  25679. }
  25680. },
  25681. visitAnyIndented_: function(tree) {
  25682. var indent = arguments[1] !== (void 0) ? arguments[1] : 1;
  25683. if (this.prettyPrint_) {
  25684. this.indentDepth_ += indent;
  25685. this.writeln_();
  25686. }
  25687. this.visitAny(tree);
  25688. if (this.prettyPrint_) {
  25689. this.indentDepth_ -= indent;
  25690. this.writeln_();
  25691. }
  25692. },
  25693. visitImportClausePair: function(tree) {
  25694. this.visitAny(tree.first);
  25695. this.write_(COMMA);
  25696. this.writeSpace_();
  25697. this.visitAny(tree.second);
  25698. },
  25699. visitImportDeclaration: function(tree) {
  25700. this.write_(IMPORT);
  25701. this.writeSpace_();
  25702. if (tree.importClause) {
  25703. this.visitAny(tree.importClause);
  25704. this.writeSpace_();
  25705. this.write_(FROM);
  25706. this.writeSpace_();
  25707. }
  25708. this.visitAny(tree.moduleSpecifier);
  25709. this.write_(SEMI_COLON);
  25710. },
  25711. visitImportSpecifier: function(tree) {
  25712. if (tree.name) {
  25713. this.writeToken_(tree.name);
  25714. this.writeSpace_();
  25715. this.write_(AS);
  25716. this.writeSpace_();
  25717. }
  25718. this.visitAny(tree.binding);
  25719. },
  25720. visitImportSpecifierSet: function(tree) {
  25721. if (tree.specifiers.type === STAR) {
  25722. this.write_(STAR);
  25723. } else {
  25724. this.writeOpenCurly_();
  25725. this.writelnList_(tree.specifiers, COMMA);
  25726. this.writeCloseCurly_();
  25727. }
  25728. },
  25729. visitImportTypeClause: function(tree) {
  25730. this.write_(TYPE);
  25731. this.writeSpace_();
  25732. this.visitAny(tree.clause);
  25733. },
  25734. visitJsxAttribute: function(tree) {
  25735. this.writeToken_(tree.name);
  25736. if (tree.value !== null) {
  25737. this.write_(EQUAL);
  25738. this.visitAny(tree.value);
  25739. }
  25740. },
  25741. visitJsxElement: function(tree) {
  25742. this.write_(OPEN_ANGLE);
  25743. this.visitAny(tree.name);
  25744. for (var i = 0; i < tree.attributes.length; i++) {
  25745. this.writeSpace_();
  25746. this.visitAny(tree.attributes[i]);
  25747. }
  25748. if (tree.children.length === 0) {
  25749. this.write_(SLASH);
  25750. this.write_(CLOSE_ANGLE);
  25751. } else {
  25752. this.write_(CLOSE_ANGLE);
  25753. this.visitList(tree.children);
  25754. this.write_(OPEN_ANGLE);
  25755. this.write_(SLASH);
  25756. this.lastCode_ = -1;
  25757. this.visitAny(tree.name);
  25758. this.write_(CLOSE_ANGLE);
  25759. }
  25760. },
  25761. visitJsxElementName: function(tree) {
  25762. for (var i = 0; i < tree.names.length; i++) {
  25763. if (i > 0) {
  25764. this.write_(PERIOD);
  25765. }
  25766. this.writeToken_(tree.names[i]);
  25767. }
  25768. },
  25769. visitJsxPlaceholder: function(tree) {
  25770. this.write_(OPEN_CURLY);
  25771. if (tree.expression !== null) {
  25772. this.visitAny(tree.expression);
  25773. }
  25774. this.write_(CLOSE_CURLY);
  25775. },
  25776. visitJsxSpreadAttribute: function(tree) {
  25777. this.write_(OPEN_CURLY);
  25778. this.write_(DOT_DOT_DOT);
  25779. this.visitAny(tree.expression);
  25780. this.write_(CLOSE_CURLY);
  25781. },
  25782. visitJsxText: function(tree) {
  25783. this.writeToken_(tree.value);
  25784. },
  25785. visitLabelledStatement: function(tree) {
  25786. this.writeToken_(tree.name);
  25787. this.write_(COLON);
  25788. this.writeSpace_();
  25789. this.visitAny(tree.statement);
  25790. },
  25791. visitLiteralExpression: function(tree) {
  25792. this.writeToken_(tree.literalToken);
  25793. },
  25794. visitLiteralPropertyName: function(tree) {
  25795. this.writeToken_(tree.literalToken);
  25796. },
  25797. visitMemberExpression: function(tree) {
  25798. this.visitAny(tree.operand);
  25799. if (tree.operand.type === LITERAL_EXPRESSION && tree.operand.literalToken.type === NUMBER) {
  25800. if (!/\.|e|E/.test(tree.operand.literalToken.value))
  25801. this.writeRequiredSpace_();
  25802. }
  25803. this.write_(PERIOD);
  25804. this.writeToken_(tree.memberName);
  25805. },
  25806. visitMemberLookupExpression: function(tree) {
  25807. this.visitAny(tree.operand);
  25808. this.write_(OPEN_SQUARE);
  25809. this.visitAny(tree.memberExpression);
  25810. this.write_(CLOSE_SQUARE);
  25811. },
  25812. visitMethodSignature: function(tree) {
  25813. this.visitAny(tree.name);
  25814. if (tree.optional) {
  25815. this.write_(QUESTION);
  25816. }
  25817. this.visitAny(tree.callSignature);
  25818. this.write_(SEMI_COLON);
  25819. },
  25820. visitSyntaxErrorTree: function(tree) {
  25821. this.write_('(function() {' + ("throw SyntaxError(" + JSON.stringify(tree.message) + ");") + '})()');
  25822. },
  25823. visitModule: function(tree) {
  25824. this.writelnList_(tree.scriptItemList, null);
  25825. },
  25826. visitModuleSpecifier: function(tree) {
  25827. this.writeToken_(tree.token);
  25828. },
  25829. visitNewExpression: function(tree) {
  25830. this.write_(NEW);
  25831. this.writeSpace_();
  25832. this.visitAny(tree.operand);
  25833. this.visitAny(tree.args);
  25834. },
  25835. visitObjectLiteral: function(tree) {
  25836. this.writeOpenCurly_();
  25837. if (tree.propertyNameAndValues.length > 1)
  25838. this.writeln_();
  25839. this.writelnList_(tree.propertyNameAndValues, COMMA);
  25840. if (tree.propertyNameAndValues.length > 1)
  25841. this.writeln_();
  25842. this.writeCloseCurly_();
  25843. },
  25844. visitObjectPattern: function(tree) {
  25845. this.writeOpenCurly_();
  25846. this.writelnList_(tree.fields, COMMA);
  25847. this.writeCloseCurly_();
  25848. },
  25849. visitObjectPatternField: function(tree) {
  25850. this.visitAny(tree.name);
  25851. if (tree.element !== null) {
  25852. this.write_(COLON);
  25853. this.writeSpace_();
  25854. this.visitAny(tree.element);
  25855. }
  25856. },
  25857. visitObjectType: function(tree) {
  25858. this.writeOpenCurly_();
  25859. this.writelnList_(tree.typeMembers, null);
  25860. this.writeCloseCurly_();
  25861. },
  25862. visitParenExpression: function(tree) {
  25863. this.write_(OPEN_PAREN);
  25864. $traceurRuntime.superGet(this, ParseTreeWriter.prototype, "visitParenExpression").call(this, tree);
  25865. this.write_(CLOSE_PAREN);
  25866. },
  25867. visitPostfixExpression: function(tree) {
  25868. this.visitAny(tree.operand);
  25869. if (tree.operand.type === POSTFIX_EXPRESSION && tree.operand.operator.type === tree.operator.type) {
  25870. this.writeRequiredSpace_();
  25871. }
  25872. this.writeToken_(tree.operator);
  25873. },
  25874. visitPredefinedType: function(tree) {
  25875. this.writeToken_(tree.typeToken);
  25876. },
  25877. visitScript: function(tree) {
  25878. this.writelnList_(tree.scriptItemList, null);
  25879. },
  25880. visitMethod: function(tree) {
  25881. this.writeAnnotations_(tree.annotations);
  25882. if (tree.isStatic) {
  25883. this.write_(STATIC);
  25884. this.writeSpace_();
  25885. }
  25886. if (tree.isAsyncFunction() || tree.isAsyncGenerator())
  25887. this.write_(ASYNC);
  25888. if (tree.isGenerator() || tree.isAsyncGenerator())
  25889. this.write_(STAR);
  25890. if (tree.isAsyncGenerator())
  25891. this.writeSpace_();
  25892. this.visitAny(tree.name);
  25893. this.write_(OPEN_PAREN);
  25894. this.visitAny(tree.parameterList);
  25895. this.write_(CLOSE_PAREN);
  25896. this.writeSpace_();
  25897. this.writeTypeAnnotation_(tree.typeAnnotation);
  25898. this.visitAny(tree.body);
  25899. },
  25900. visitPropertyNameAssignment: function(tree) {
  25901. this.visitAny(tree.name);
  25902. this.write_(COLON);
  25903. this.writeSpace_();
  25904. this.visitAny(tree.value);
  25905. },
  25906. visitPropertyNameShorthand: function(tree) {
  25907. this.writeToken_(tree.name);
  25908. },
  25909. visitPropertyVariableDeclaration: function(tree) {
  25910. this.writeAnnotations_(tree.annotations);
  25911. if (tree.isStatic) {
  25912. this.write_(STATIC);
  25913. this.writeSpace_();
  25914. }
  25915. this.visitAny(tree.name);
  25916. this.writeTypeAnnotation_(tree.typeAnnotation);
  25917. if (tree.initalizer) {
  25918. this.writeSpace_();
  25919. this.write_(EQUAL);
  25920. this.writeSpace_();
  25921. this.visitAny(tree.initializer);
  25922. }
  25923. this.write_(SEMI_COLON);
  25924. },
  25925. visitPropertySignature: function(tree) {
  25926. this.visitAny(tree.name);
  25927. if (tree.optional) {
  25928. this.write_(QUESTION);
  25929. }
  25930. this.writeTypeAnnotation_(tree.typeAnnotation);
  25931. this.write_(SEMI_COLON);
  25932. },
  25933. visitTemplateLiteralExpression: function(tree) {
  25934. if (tree.operand) {
  25935. this.visitAny(tree.operand);
  25936. this.writeSpace_();
  25937. }
  25938. this.writeRaw_(BACK_QUOTE);
  25939. this.visitList(tree.elements);
  25940. this.writeRaw_(BACK_QUOTE);
  25941. },
  25942. visitTemplateLiteralPortion: function(tree) {
  25943. this.writeToken_(tree.value);
  25944. },
  25945. visitTemplateSubstitution: function(tree) {
  25946. this.writeRaw_('$');
  25947. this.writeRaw_(OPEN_CURLY);
  25948. this.visitAny(tree.expression);
  25949. this.writeRaw_(CLOSE_CURLY);
  25950. },
  25951. visitReturnStatement: function(tree) {
  25952. this.write_(RETURN);
  25953. if (tree.expression) {
  25954. this.writeSpace_(tree.expression);
  25955. this.visitAny(tree.expression);
  25956. }
  25957. this.write_(SEMI_COLON);
  25958. },
  25959. visitRestParameter: function(tree) {
  25960. this.write_(DOT_DOT_DOT);
  25961. this.visitAny(tree.identifier);
  25962. },
  25963. visitSetAccessor: function(tree) {
  25964. this.writeAnnotations_(tree.annotations);
  25965. if (tree.isStatic) {
  25966. this.write_(STATIC);
  25967. this.writeSpace_();
  25968. }
  25969. this.write_(SET);
  25970. this.writeSpace_();
  25971. this.visitAny(tree.name);
  25972. this.write_(OPEN_PAREN);
  25973. this.visitAny(tree.parameterList);
  25974. this.write_(CLOSE_PAREN);
  25975. this.writeSpace_();
  25976. this.visitAny(tree.body);
  25977. },
  25978. visitSpreadExpression: function(tree) {
  25979. this.write_(DOT_DOT_DOT);
  25980. this.visitAny(tree.expression);
  25981. },
  25982. visitSpreadPatternElement: function(tree) {
  25983. this.write_(DOT_DOT_DOT);
  25984. this.visitAny(tree.lvalue);
  25985. },
  25986. visitStateMachine: function(tree) {
  25987. throw new Error('State machines cannot be converted to source');
  25988. },
  25989. visitSuperExpression: function(tree) {
  25990. this.write_(SUPER);
  25991. },
  25992. visitSwitchStatement: function(tree) {
  25993. this.write_(SWITCH);
  25994. this.writeSpace_();
  25995. this.write_(OPEN_PAREN);
  25996. this.visitAny(tree.expression);
  25997. this.write_(CLOSE_PAREN);
  25998. this.writeSpace_();
  25999. this.writeOpenCurly_();
  26000. this.writelnList_(tree.caseClauses, null);
  26001. this.writeCloseCurly_();
  26002. },
  26003. visitThisExpression: function(tree) {
  26004. this.write_(THIS);
  26005. },
  26006. visitThrowStatement: function(tree) {
  26007. this.write_(THROW);
  26008. this.writeSpace_();
  26009. this.visitAny(tree.value);
  26010. this.write_(SEMI_COLON);
  26011. },
  26012. visitTryStatement: function(tree) {
  26013. this.write_(TRY);
  26014. this.writeSpace_();
  26015. this.visitAny(tree.body);
  26016. if (tree.catchBlock) {
  26017. this.writeSpace_();
  26018. this.visitAny(tree.catchBlock);
  26019. }
  26020. if (tree.finallyBlock) {
  26021. this.writeSpace_();
  26022. this.visitAny(tree.finallyBlock);
  26023. }
  26024. },
  26025. visitTypeAliasDeclaration: function(tree) {
  26026. this.write_(TYPE);
  26027. this.writeRequiredSpace_();
  26028. this.writeToken_(tree.name);
  26029. this.writeSpace_();
  26030. this.write_(EQUAL);
  26031. this.writeSpace_();
  26032. this.visitAny(tree.value);
  26033. this.write_(SEMI_COLON);
  26034. },
  26035. visitTypeArguments: function(tree) {
  26036. this.write_(OPEN_ANGLE);
  26037. var args = tree.args;
  26038. this.visitAny(args[0]);
  26039. for (var i = 1; i < args.length; i++) {
  26040. this.write_(COMMA);
  26041. this.writeSpace_();
  26042. this.visitAny(args[i]);
  26043. }
  26044. this.write_(CLOSE_ANGLE);
  26045. },
  26046. visitTypeName: function(tree) {
  26047. if (tree.moduleName) {
  26048. this.visitAny(tree.moduleName);
  26049. this.write_(PERIOD);
  26050. }
  26051. this.writeToken_(tree.name);
  26052. },
  26053. visitTypeParameter: function(tree) {
  26054. this.writeToken_(tree.identifierToken);
  26055. if (tree.extendsType) {
  26056. this.writeSpace_();
  26057. this.write_(EXTENDS);
  26058. this.writeSpace_();
  26059. this.visitAny(tree.extendsType);
  26060. }
  26061. },
  26062. visitTypeParameters: function(tree) {
  26063. this.write_(OPEN_ANGLE);
  26064. this.writeList_(tree.parameters, COMMA, false);
  26065. this.write_(CLOSE_ANGLE);
  26066. },
  26067. visitUnaryExpression: function(tree) {
  26068. var op = tree.operator;
  26069. this.writeToken_(op);
  26070. var operand = tree.operand;
  26071. if (operand.type === UNARY_EXPRESSION && requiresSpaceBetween(op.type, operand.operator.type)) {
  26072. this.writeRequiredSpace_();
  26073. }
  26074. this.visitAny(operand);
  26075. },
  26076. visitUnionType: function(tree) {
  26077. this.visitAny(tree.types[0]);
  26078. for (var i = 1; i < tree.types.length; i++) {
  26079. this.writeSpace_();
  26080. this.write_(BAR);
  26081. this.writeSpace_();
  26082. this.visitAny(tree.types[i]);
  26083. }
  26084. },
  26085. visitVariableDeclarationList: function(tree) {
  26086. this.write_(tree.declarationType);
  26087. this.writeSpace_();
  26088. this.writeList_(tree.declarations, COMMA, true, 2);
  26089. },
  26090. visitVariableDeclaration: function(tree) {
  26091. this.visitAny(tree.lvalue);
  26092. this.writeTypeAnnotation_(tree.typeAnnotation);
  26093. if (tree.initializer !== null) {
  26094. this.writeSpace_();
  26095. this.write_(EQUAL);
  26096. this.writeSpace_();
  26097. this.visitAny(tree.initializer);
  26098. }
  26099. },
  26100. visitVariableStatement: function(tree) {
  26101. $traceurRuntime.superGet(this, ParseTreeWriter.prototype, "visitVariableStatement").call(this, tree);
  26102. this.write_(SEMI_COLON);
  26103. },
  26104. visitWhileStatement: function(tree) {
  26105. this.write_(WHILE);
  26106. this.writeSpace_();
  26107. this.write_(OPEN_PAREN);
  26108. this.visitAny(tree.condition);
  26109. this.write_(CLOSE_PAREN);
  26110. this.visitAnyBlockOrIndent_(tree.body);
  26111. },
  26112. visitWithStatement: function(tree) {
  26113. this.write_(WITH);
  26114. this.writeSpace_();
  26115. this.write_(OPEN_PAREN);
  26116. this.visitAny(tree.expression);
  26117. this.write_(CLOSE_PAREN);
  26118. this.writeSpace_();
  26119. this.visitAny(tree.body);
  26120. },
  26121. visitYieldExpression: function(tree) {
  26122. this.write_(YIELD);
  26123. if (tree.isYieldFor)
  26124. this.write_(STAR);
  26125. if (tree.expression) {
  26126. this.writeSpace_();
  26127. this.visitAny(tree.expression);
  26128. }
  26129. },
  26130. writeCurrentln_: function() {
  26131. this.result_ += this.currentLine_ + NEW_LINE;
  26132. },
  26133. writeln_: function() {
  26134. if (this.currentLine_)
  26135. this.writeCurrentln_();
  26136. this.currentLine_ = '';
  26137. this.lastCode_ = -1;
  26138. },
  26139. writelnList_: function(list, delimiter) {
  26140. if (delimiter !== null) {
  26141. this.writeList_(list, delimiter, true);
  26142. } else {
  26143. if (list.length > 0)
  26144. this.writeln_();
  26145. this.writeList_(list, '', true);
  26146. if (list.length > 0)
  26147. this.writeln_();
  26148. }
  26149. },
  26150. writeList_: function(list, delimiter, writeNewLine) {
  26151. var indent = arguments[3] !== (void 0) ? arguments[3] : 0;
  26152. var first = true;
  26153. for (var i = 0; i < list.length; i++) {
  26154. if (first) {
  26155. first = false;
  26156. } else {
  26157. if (delimiter !== '') {
  26158. this.write_(delimiter);
  26159. if (!writeNewLine)
  26160. this.writeSpace_();
  26161. }
  26162. if (writeNewLine) {
  26163. if (i === 1)
  26164. this.indentDepth_ += indent;
  26165. this.writeln_();
  26166. }
  26167. }
  26168. this.visitAny(list[i]);
  26169. }
  26170. if (writeNewLine && list.length > 1)
  26171. this.indentDepth_ -= indent;
  26172. },
  26173. writeRaw_: function(value) {
  26174. this.currentLine_ += value;
  26175. this.lastCode_ = value.charCodeAt(value.length - 1);
  26176. },
  26177. writeToken_: function(token) {
  26178. this.write_(token.toString());
  26179. },
  26180. write_: function(value) {
  26181. if (this.prettyPrint_ && this.currentLine_.length === 0) {
  26182. for (var i = 0,
  26183. indent = this.indentDepth_; i < indent; i++) {
  26184. this.writeRaw_(' ');
  26185. }
  26186. }
  26187. if (this.needsSpace_(value)) {
  26188. this.writeRaw_(' ');
  26189. }
  26190. this.writeRaw_(value);
  26191. },
  26192. writeCloseCurly_: function() {
  26193. this.indentDepth_--;
  26194. this.write_(CLOSE_CURLY);
  26195. },
  26196. writeOpenCurly_: function() {
  26197. this.write_(OPEN_CURLY);
  26198. this.indentDepth_++;
  26199. },
  26200. writeSpace_: function() {
  26201. if (this.prettyPrint_ && !isWhitespace(this.lastCode_)) {
  26202. this.writeRaw_(' ');
  26203. }
  26204. },
  26205. writeRequiredSpace_: function() {
  26206. if (!isWhitespace(this.lastCode_)) {
  26207. this.writeRaw_(' ');
  26208. }
  26209. },
  26210. writeTypeAnnotation_: function(typeAnnotation) {
  26211. if (typeAnnotation !== null) {
  26212. this.write_(COLON);
  26213. this.writeSpace_();
  26214. this.visitAny(typeAnnotation);
  26215. }
  26216. },
  26217. writeAnnotations_: function(annotations) {
  26218. var writeNewLine = arguments[1] !== (void 0) ? arguments[1] : this.prettyPrint_;
  26219. if (annotations.length > 0) {
  26220. this.writeList_(annotations, '', writeNewLine);
  26221. if (writeNewLine)
  26222. this.writeln_();
  26223. }
  26224. },
  26225. needsSpace_: function(token) {
  26226. var lastCode = this.lastCode_;
  26227. if (isWhitespace(lastCode))
  26228. return false;
  26229. var firstCode = token.toString().charCodeAt(0);
  26230. return isIdentifierPart(firstCode) && (isIdentifierPart(lastCode) || lastCode === 47);
  26231. }
  26232. }, {}, $__super);
  26233. }(ParseTreeVisitor);
  26234. function requiresSpaceBetween(first, second) {
  26235. return (first === MINUS || first === MINUS_MINUS) && (second === MINUS || second === MINUS_MINUS) || (first === PLUS || first === PLUS_PLUS) && (second === PLUS || second === PLUS_PLUS);
  26236. }
  26237. return {get ParseTreeWriter() {
  26238. return ParseTreeWriter;
  26239. }};
  26240. });
  26241. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js", [], function() {
  26242. "use strict";
  26243. var __moduleName = "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js";
  26244. var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeWriter.js", "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js")).ParseTreeWriter;
  26245. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js")).StringSet;
  26246. var ParseTreeMapWriter = function($__super) {
  26247. function ParseTreeMapWriter(sourceMapConfiguration) {
  26248. var options = arguments[1];
  26249. $traceurRuntime.superConstructor(ParseTreeMapWriter).call(this, options);
  26250. this.sourceMapGenerator_ = sourceMapConfiguration.sourceMapGenerator;
  26251. this.lowResolution_ = sourceMapConfiguration.lowResolution;
  26252. this.basepath_ = sourceMapConfiguration.basepath;
  26253. this.outputLineCount_ = 1;
  26254. this.isFirstMapping_ = true;
  26255. this.sourcesInMap_ = new StringSet();
  26256. this.relativeSourceName_ = '';
  26257. this.generated_ = null;
  26258. this.original_ = null;
  26259. this.previousMapping_ = null;
  26260. }
  26261. return ($traceurRuntime.createClass)(ParseTreeMapWriter, {
  26262. visitAny: function(tree) {
  26263. if (tree === null) {
  26264. return;
  26265. }
  26266. if (tree.location !== null)
  26267. this.enterBranch(tree.location);
  26268. $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "visitAny").call(this, tree);
  26269. if (tree.location !== null)
  26270. this.exitBranch(tree.location);
  26271. },
  26272. writeCurrentln_: function() {
  26273. $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "writeCurrentln_").call(this);
  26274. this.flushMappings();
  26275. this.outputLineCount_++;
  26276. this.generated_ = {
  26277. line: this.outputLineCount_,
  26278. column: 0
  26279. };
  26280. this.flushMappings();
  26281. },
  26282. write_: function(value) {
  26283. this.generate();
  26284. $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "write_").call(this, value);
  26285. this.generate();
  26286. },
  26287. generate: function() {
  26288. var length = this.currentLine_.length;
  26289. var column = length ? length - 1 : 0;
  26290. this.generated_ = {
  26291. line: this.outputLineCount_,
  26292. column: column
  26293. };
  26294. this.flushMappings();
  26295. },
  26296. enterBranch: function(location) {
  26297. var $__2 = location.start,
  26298. line = $__2.line,
  26299. column = $__2.column,
  26300. source = $__2.source;
  26301. this.originate(line, column, source);
  26302. },
  26303. exitBranch: function(location) {
  26304. var $__2 = location.end,
  26305. line = $__2.line,
  26306. column = $__2.column,
  26307. source = $__2.source;
  26308. this.originate(line, column ? column - 1 : 0, source);
  26309. },
  26310. originate: function(line, column, source) {
  26311. line++;
  26312. if (this.original_ && this.original_.line !== line)
  26313. this.flushMappings();
  26314. this.original_ = {
  26315. line: line,
  26316. column: column
  26317. };
  26318. var name = source.name;
  26319. if (name && !this.sourcesInMap_.has(name)) {
  26320. this.sourcesInMap_.add(name);
  26321. this.relativeSourceName_ = relativePath(name, this.basepath_);
  26322. this.sourceMapGenerator_.setSourceContent(this.relativeSourceName_, source.contents);
  26323. }
  26324. this.flushMappings();
  26325. },
  26326. flushMappings: function() {
  26327. if (this.original_ && this.generated_) {
  26328. this.addMapping();
  26329. this.original_ = null;
  26330. this.generated_ = null;
  26331. }
  26332. },
  26333. isSame: function(lhs, rhs) {
  26334. return lhs.line === rhs.line && lhs.column === rhs.column;
  26335. },
  26336. skipMapping: function() {
  26337. if (!this.previousMapping_)
  26338. return false;
  26339. if (this.lowResolution_ && this.previousMapping_.generated.line === this.generated_.line)
  26340. return true;
  26341. if (this.isSame(this.previousMapping_.generated, this.generated_) && this.isSame(this.previousMapping_.original, this.original_))
  26342. return true;
  26343. },
  26344. addMapping: function() {
  26345. if (this.skipMapping())
  26346. return;
  26347. var mapping = {
  26348. generated: this.generated_,
  26349. original: this.original_,
  26350. source: this.relativeSourceName_
  26351. };
  26352. this.sourceMapGenerator_.addMapping(mapping);
  26353. this.previousMapping_ = mapping;
  26354. }
  26355. }, {}, $__super);
  26356. }(ParseTreeWriter);
  26357. function relativePath(name, sourceRoot) {
  26358. var $__3;
  26359. if (!name || name[0] === '@')
  26360. return name;
  26361. if (!sourceRoot)
  26362. return name;
  26363. var nameSegments = name.split('/');
  26364. var rootSegments = sourceRoot.split('/');
  26365. if (rootSegments[rootSegments.length - 1]) {
  26366. throw new Error('rootPath must end in /');
  26367. }
  26368. var commonSegmentsLength = 0;
  26369. var uniqueSegments = [];
  26370. var foundUnique = false;
  26371. nameSegments.forEach(function(segment, index) {
  26372. if (!foundUnique && segment === rootSegments[index]) {
  26373. commonSegmentsLength++;
  26374. return;
  26375. }
  26376. foundUnique = true;
  26377. uniqueSegments.push(segment);
  26378. });
  26379. if (commonSegmentsLength < 1 || commonSegmentsLength === rootSegments.length)
  26380. return name;
  26381. var dotDotSegments = rootSegments.length - commonSegmentsLength - 1;
  26382. var segments = [];
  26383. while (dotDotSegments--) {
  26384. segments.push('..');
  26385. }
  26386. ($__3 = segments).push.apply($__3, $traceurRuntime.spread(uniqueSegments));
  26387. return segments.join('/');
  26388. }
  26389. return {
  26390. get ParseTreeMapWriter() {
  26391. return ParseTreeMapWriter;
  26392. },
  26393. get relativePath() {
  26394. return relativePath;
  26395. }
  26396. };
  26397. });
  26398. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/SourceMapIntegration.js", [], function() {
  26399. "use strict";
  26400. var __moduleName = "traceur@0.0.112/src/outputgeneration/SourceMapIntegration.js";
  26401. function makeDefine(mapping, id) {
  26402. var require = function(id) {
  26403. return mapping[id];
  26404. };
  26405. var exports = mapping[id] = {};
  26406. var module = null;
  26407. return function(factory) {
  26408. factory(require, exports, module);
  26409. };
  26410. }
  26411. var define,
  26412. m = {};
  26413. define = makeDefine(m, './util');
  26414. if (typeof define !== 'function') {
  26415. var define = require('amdefine')(module, require);
  26416. }
  26417. define(function(require, exports, module) {
  26418. function getArg(aArgs, aName, aDefaultValue) {
  26419. if (aName in aArgs) {
  26420. return aArgs[aName];
  26421. } else if (arguments.length === 3) {
  26422. return aDefaultValue;
  26423. } else {
  26424. throw new Error('"' + aName + '" is a required argument.');
  26425. }
  26426. }
  26427. exports.getArg = getArg;
  26428. var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
  26429. var dataUrlRegexp = /^data:.+\,.+$/;
  26430. function urlParse(aUrl) {
  26431. var match = aUrl.match(urlRegexp);
  26432. if (!match) {
  26433. return null;
  26434. }
  26435. return {
  26436. scheme: match[1],
  26437. auth: match[2],
  26438. host: match[3],
  26439. port: match[4],
  26440. path: match[5]
  26441. };
  26442. }
  26443. exports.urlParse = urlParse;
  26444. function urlGenerate(aParsedUrl) {
  26445. var url = '';
  26446. if (aParsedUrl.scheme) {
  26447. url += aParsedUrl.scheme + ':';
  26448. }
  26449. url += '//';
  26450. if (aParsedUrl.auth) {
  26451. url += aParsedUrl.auth + '@';
  26452. }
  26453. if (aParsedUrl.host) {
  26454. url += aParsedUrl.host;
  26455. }
  26456. if (aParsedUrl.port) {
  26457. url += ":" + aParsedUrl.port;
  26458. }
  26459. if (aParsedUrl.path) {
  26460. url += aParsedUrl.path;
  26461. }
  26462. return url;
  26463. }
  26464. exports.urlGenerate = urlGenerate;
  26465. function normalize(aPath) {
  26466. var path = aPath;
  26467. var url = urlParse(aPath);
  26468. if (url) {
  26469. if (!url.path) {
  26470. return aPath;
  26471. }
  26472. path = url.path;
  26473. }
  26474. var isAbsolute = (path.charAt(0) === '/');
  26475. var parts = path.split(/\/+/);
  26476. for (var part = void 0,
  26477. up = 0,
  26478. i = parts.length - 1; i >= 0; i--) {
  26479. part = parts[i];
  26480. if (part === '.') {
  26481. parts.splice(i, 1);
  26482. } else if (part === '..') {
  26483. up++;
  26484. } else if (up > 0) {
  26485. if (part === '') {
  26486. parts.splice(i + 1, up);
  26487. up = 0;
  26488. } else {
  26489. parts.splice(i, 2);
  26490. up--;
  26491. }
  26492. }
  26493. }
  26494. path = parts.join('/');
  26495. if (path === '') {
  26496. path = isAbsolute ? '/' : '.';
  26497. }
  26498. if (url) {
  26499. url.path = path;
  26500. return urlGenerate(url);
  26501. }
  26502. return path;
  26503. }
  26504. exports.normalize = normalize;
  26505. function join(aRoot, aPath) {
  26506. if (aRoot === "") {
  26507. aRoot = ".";
  26508. }
  26509. if (aPath === "") {
  26510. aPath = ".";
  26511. }
  26512. var aPathUrl = urlParse(aPath);
  26513. var aRootUrl = urlParse(aRoot);
  26514. if (aRootUrl) {
  26515. aRoot = aRootUrl.path || '/';
  26516. }
  26517. if (aPathUrl && !aPathUrl.scheme) {
  26518. if (aRootUrl) {
  26519. aPathUrl.scheme = aRootUrl.scheme;
  26520. }
  26521. return urlGenerate(aPathUrl);
  26522. }
  26523. if (aPathUrl || aPath.match(dataUrlRegexp)) {
  26524. return aPath;
  26525. }
  26526. if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
  26527. aRootUrl.host = aPath;
  26528. return urlGenerate(aRootUrl);
  26529. }
  26530. var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
  26531. if (aRootUrl) {
  26532. aRootUrl.path = joined;
  26533. return urlGenerate(aRootUrl);
  26534. }
  26535. return joined;
  26536. }
  26537. exports.join = join;
  26538. function relative(aRoot, aPath) {
  26539. if (aRoot === "") {
  26540. aRoot = ".";
  26541. }
  26542. aRoot = aRoot.replace(/\/$/, '');
  26543. var url = urlParse(aRoot);
  26544. if (aPath.charAt(0) == "/" && url && url.path == "/") {
  26545. return aPath.slice(1);
  26546. }
  26547. return aPath.indexOf(aRoot + '/') === 0 ? aPath.substr(aRoot.length + 1) : aPath;
  26548. }
  26549. exports.relative = relative;
  26550. function toSetString(aStr) {
  26551. return '$' + aStr;
  26552. }
  26553. exports.toSetString = toSetString;
  26554. function fromSetString(aStr) {
  26555. return aStr.substr(1);
  26556. }
  26557. exports.fromSetString = fromSetString;
  26558. function strcmp(aStr1, aStr2) {
  26559. var s1 = aStr1 || "";
  26560. var s2 = aStr2 || "";
  26561. return (s1 > s2) - (s1 < s2);
  26562. }
  26563. function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  26564. var cmp;
  26565. cmp = strcmp(mappingA.source, mappingB.source);
  26566. if (cmp) {
  26567. return cmp;
  26568. }
  26569. cmp = mappingA.originalLine - mappingB.originalLine;
  26570. if (cmp) {
  26571. return cmp;
  26572. }
  26573. cmp = mappingA.originalColumn - mappingB.originalColumn;
  26574. if (cmp || onlyCompareOriginal) {
  26575. return cmp;
  26576. }
  26577. cmp = strcmp(mappingA.name, mappingB.name);
  26578. if (cmp) {
  26579. return cmp;
  26580. }
  26581. cmp = mappingA.generatedLine - mappingB.generatedLine;
  26582. if (cmp) {
  26583. return cmp;
  26584. }
  26585. return mappingA.generatedColumn - mappingB.generatedColumn;
  26586. }
  26587. ;
  26588. exports.compareByOriginalPositions = compareByOriginalPositions;
  26589. function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) {
  26590. var cmp;
  26591. cmp = mappingA.generatedLine - mappingB.generatedLine;
  26592. if (cmp) {
  26593. return cmp;
  26594. }
  26595. cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  26596. if (cmp || onlyCompareGenerated) {
  26597. return cmp;
  26598. }
  26599. cmp = strcmp(mappingA.source, mappingB.source);
  26600. if (cmp) {
  26601. return cmp;
  26602. }
  26603. cmp = mappingA.originalLine - mappingB.originalLine;
  26604. if (cmp) {
  26605. return cmp;
  26606. }
  26607. cmp = mappingA.originalColumn - mappingB.originalColumn;
  26608. if (cmp) {
  26609. return cmp;
  26610. }
  26611. return strcmp(mappingA.name, mappingB.name);
  26612. }
  26613. ;
  26614. exports.compareByGeneratedPositions = compareByGeneratedPositions;
  26615. });
  26616. define = makeDefine(m, './array-set');
  26617. if (typeof define !== 'function') {
  26618. var define = require('amdefine')(module, require);
  26619. }
  26620. define(function(require, exports, module) {
  26621. var util = require('./util');
  26622. function ArraySet() {
  26623. this._array = [];
  26624. this._set = {};
  26625. }
  26626. ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  26627. var set = new ArraySet();
  26628. for (var i = 0,
  26629. len = aArray.length; i < len; i++) {
  26630. set.add(aArray[i], aAllowDuplicates);
  26631. }
  26632. return set;
  26633. };
  26634. ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  26635. var isDuplicate = this.has(aStr);
  26636. var idx = this._array.length;
  26637. if (!isDuplicate || aAllowDuplicates) {
  26638. this._array.push(aStr);
  26639. }
  26640. if (!isDuplicate) {
  26641. this._set[util.toSetString(aStr)] = idx;
  26642. }
  26643. };
  26644. ArraySet.prototype.has = function ArraySet_has(aStr) {
  26645. return Object.prototype.hasOwnProperty.call(this._set, util.toSetString(aStr));
  26646. };
  26647. ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  26648. if (this.has(aStr)) {
  26649. return this._set[util.toSetString(aStr)];
  26650. }
  26651. throw new Error('"' + aStr + '" is not in the set.');
  26652. };
  26653. ArraySet.prototype.at = function ArraySet_at(aIdx) {
  26654. if (aIdx >= 0 && aIdx < this._array.length) {
  26655. return this._array[aIdx];
  26656. }
  26657. throw new Error('No element indexed by ' + aIdx);
  26658. };
  26659. ArraySet.prototype.toArray = function ArraySet_toArray() {
  26660. return this._array.slice();
  26661. };
  26662. exports.ArraySet = ArraySet;
  26663. });
  26664. define = makeDefine(m, './base64');
  26665. if (typeof define !== 'function') {
  26666. var define = require('amdefine')(module, require);
  26667. }
  26668. define(function(require, exports, module) {
  26669. var charToIntMap = {};
  26670. var intToCharMap = {};
  26671. 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('').forEach(function(ch, index) {
  26672. charToIntMap[ch] = index;
  26673. intToCharMap[index] = ch;
  26674. });
  26675. exports.encode = function base64_encode(aNumber) {
  26676. if (aNumber in intToCharMap) {
  26677. return intToCharMap[aNumber];
  26678. }
  26679. throw new TypeError("Must be between 0 and 63: " + aNumber);
  26680. };
  26681. exports.decode = function base64_decode(aChar) {
  26682. if (aChar in charToIntMap) {
  26683. return charToIntMap[aChar];
  26684. }
  26685. throw new TypeError("Not a valid base 64 digit: " + aChar);
  26686. };
  26687. });
  26688. define = makeDefine(m, './base64-vlq');
  26689. if (typeof define !== 'function') {
  26690. var define = require('amdefine')(module, require);
  26691. }
  26692. define(function(require, exports, module) {
  26693. var base64 = require('./base64');
  26694. var VLQ_BASE_SHIFT = 5;
  26695. var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
  26696. var VLQ_BASE_MASK = VLQ_BASE - 1;
  26697. var VLQ_CONTINUATION_BIT = VLQ_BASE;
  26698. function toVLQSigned(aValue) {
  26699. return aValue < 0 ? ((-aValue) << 1) + 1 : (aValue << 1) + 0;
  26700. }
  26701. function fromVLQSigned(aValue) {
  26702. var isNegative = (aValue & 1) === 1;
  26703. var shifted = aValue >> 1;
  26704. return isNegative ? -shifted : shifted;
  26705. }
  26706. exports.encode = function base64VLQ_encode(aValue) {
  26707. var encoded = "";
  26708. var digit;
  26709. var vlq = toVLQSigned(aValue);
  26710. do {
  26711. digit = vlq & VLQ_BASE_MASK;
  26712. vlq >>>= VLQ_BASE_SHIFT;
  26713. if (vlq > 0) {
  26714. digit |= VLQ_CONTINUATION_BIT;
  26715. }
  26716. encoded += base64.encode(digit);
  26717. } while (vlq > 0);
  26718. return encoded;
  26719. };
  26720. exports.decode = function base64VLQ_decode(aStr, aOutParam) {
  26721. var i = 0;
  26722. var strLen = aStr.length;
  26723. var result = 0;
  26724. var shift = 0;
  26725. var continuation,
  26726. digit;
  26727. do {
  26728. if (i >= strLen) {
  26729. throw new Error("Expected more digits in base 64 VLQ value.");
  26730. }
  26731. digit = base64.decode(aStr.charAt(i++));
  26732. continuation = !!(digit & VLQ_CONTINUATION_BIT);
  26733. digit &= VLQ_BASE_MASK;
  26734. result = result + (digit << shift);
  26735. shift += VLQ_BASE_SHIFT;
  26736. } while (continuation);
  26737. aOutParam.value = fromVLQSigned(result);
  26738. aOutParam.rest = aStr.slice(i);
  26739. };
  26740. });
  26741. define = makeDefine(m, './binary-search');
  26742. if (typeof define !== 'function') {
  26743. var define = require('amdefine')(module, require);
  26744. }
  26745. define(function(require, exports, module) {
  26746. function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {
  26747. var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  26748. var cmp = aCompare(aNeedle, aHaystack[mid], true);
  26749. if (cmp === 0) {
  26750. return mid;
  26751. } else if (cmp > 0) {
  26752. if (aHigh - mid > 1) {
  26753. return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare);
  26754. }
  26755. return mid;
  26756. } else {
  26757. if (mid - aLow > 1) {
  26758. return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare);
  26759. }
  26760. return aLow < 0 ? -1 : aLow;
  26761. }
  26762. }
  26763. exports.search = function search(aNeedle, aHaystack, aCompare) {
  26764. if (aHaystack.length === 0) {
  26765. return -1;
  26766. }
  26767. return recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare);
  26768. };
  26769. });
  26770. define = makeDefine(m, './mapping-list');
  26771. if (typeof define !== 'function') {
  26772. var define = require('amdefine')(module, require);
  26773. }
  26774. define(function(require, exports, module) {
  26775. var util = require('./util');
  26776. function generatedPositionAfter(mappingA, mappingB) {
  26777. var lineA = mappingA.generatedLine;
  26778. var lineB = mappingB.generatedLine;
  26779. var columnA = mappingA.generatedColumn;
  26780. var columnB = mappingB.generatedColumn;
  26781. return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositions(mappingA, mappingB) <= 0;
  26782. }
  26783. function MappingList() {
  26784. this._array = [];
  26785. this._sorted = true;
  26786. this._last = {
  26787. generatedLine: -1,
  26788. generatedColumn: 0
  26789. };
  26790. }
  26791. MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {
  26792. this._array.forEach(aCallback, aThisArg);
  26793. };
  26794. MappingList.prototype.add = function MappingList_add(aMapping) {
  26795. var mapping;
  26796. if (generatedPositionAfter(this._last, aMapping)) {
  26797. this._last = aMapping;
  26798. this._array.push(aMapping);
  26799. } else {
  26800. this._sorted = false;
  26801. this._array.push(aMapping);
  26802. }
  26803. };
  26804. MappingList.prototype.toArray = function MappingList_toArray() {
  26805. if (!this._sorted) {
  26806. this._array.sort(util.compareByGeneratedPositions);
  26807. this._sorted = true;
  26808. }
  26809. return this._array;
  26810. };
  26811. exports.MappingList = MappingList;
  26812. });
  26813. define = makeDefine(m, './source-map-generator');
  26814. if (typeof define !== 'function') {
  26815. var define = require('amdefine')(module, require);
  26816. }
  26817. define(function(require, exports, module) {
  26818. var base64VLQ = require('./base64-vlq');
  26819. var util = require('./util');
  26820. var ArraySet = require('./array-set').ArraySet;
  26821. var MappingList = require('./mapping-list').MappingList;
  26822. function SourceMapGenerator(aArgs) {
  26823. if (!aArgs) {
  26824. aArgs = {};
  26825. }
  26826. this._file = util.getArg(aArgs, 'file', null);
  26827. this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  26828. this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  26829. this._sources = new ArraySet();
  26830. this._names = new ArraySet();
  26831. this._mappings = new MappingList();
  26832. this._sourcesContents = null;
  26833. }
  26834. SourceMapGenerator.prototype._version = 3;
  26835. SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
  26836. var sourceRoot = aSourceMapConsumer.sourceRoot;
  26837. var generator = new SourceMapGenerator({
  26838. file: aSourceMapConsumer.file,
  26839. sourceRoot: sourceRoot
  26840. });
  26841. aSourceMapConsumer.eachMapping(function(mapping) {
  26842. var newMapping = {generated: {
  26843. line: mapping.generatedLine,
  26844. column: mapping.generatedColumn
  26845. }};
  26846. if (mapping.source != null) {
  26847. newMapping.source = mapping.source;
  26848. if (sourceRoot != null) {
  26849. newMapping.source = util.relative(sourceRoot, newMapping.source);
  26850. }
  26851. newMapping.original = {
  26852. line: mapping.originalLine,
  26853. column: mapping.originalColumn
  26854. };
  26855. if (mapping.name != null) {
  26856. newMapping.name = mapping.name;
  26857. }
  26858. }
  26859. generator.addMapping(newMapping);
  26860. });
  26861. aSourceMapConsumer.sources.forEach(function(sourceFile) {
  26862. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  26863. if (content != null) {
  26864. generator.setSourceContent(sourceFile, content);
  26865. }
  26866. });
  26867. return generator;
  26868. };
  26869. SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {
  26870. var generated = util.getArg(aArgs, 'generated');
  26871. var original = util.getArg(aArgs, 'original', null);
  26872. var source = util.getArg(aArgs, 'source', null);
  26873. var name = util.getArg(aArgs, 'name', null);
  26874. if (!this._skipValidation) {
  26875. this._validateMapping(generated, original, source, name);
  26876. }
  26877. if (source != null && !this._sources.has(source)) {
  26878. this._sources.add(source);
  26879. }
  26880. if (name != null && !this._names.has(name)) {
  26881. this._names.add(name);
  26882. }
  26883. this._mappings.add({
  26884. generatedLine: generated.line,
  26885. generatedColumn: generated.column,
  26886. originalLine: original != null && original.line,
  26887. originalColumn: original != null && original.column,
  26888. source: source,
  26889. name: name
  26890. });
  26891. };
  26892. SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
  26893. var source = aSourceFile;
  26894. if (this._sourceRoot != null) {
  26895. source = util.relative(this._sourceRoot, source);
  26896. }
  26897. if (aSourceContent != null) {
  26898. if (!this._sourcesContents) {
  26899. this._sourcesContents = {};
  26900. }
  26901. this._sourcesContents[util.toSetString(source)] = aSourceContent;
  26902. } else if (this._sourcesContents) {
  26903. delete this._sourcesContents[util.toSetString(source)];
  26904. if (Object.keys(this._sourcesContents).length === 0) {
  26905. this._sourcesContents = null;
  26906. }
  26907. }
  26908. };
  26909. SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
  26910. var sourceFile = aSourceFile;
  26911. if (aSourceFile == null) {
  26912. if (aSourceMapConsumer.file == null) {
  26913. throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\'s "file" property. Both were omitted.');
  26914. }
  26915. sourceFile = aSourceMapConsumer.file;
  26916. }
  26917. var sourceRoot = this._sourceRoot;
  26918. if (sourceRoot != null) {
  26919. sourceFile = util.relative(sourceRoot, sourceFile);
  26920. }
  26921. var newSources = new ArraySet();
  26922. var newNames = new ArraySet();
  26923. this._mappings.unsortedForEach(function(mapping) {
  26924. if (mapping.source === sourceFile && mapping.originalLine != null) {
  26925. var original = aSourceMapConsumer.originalPositionFor({
  26926. line: mapping.originalLine,
  26927. column: mapping.originalColumn
  26928. });
  26929. if (original.source != null) {
  26930. mapping.source = original.source;
  26931. if (aSourceMapPath != null) {
  26932. mapping.source = util.join(aSourceMapPath, mapping.source);
  26933. }
  26934. if (sourceRoot != null) {
  26935. mapping.source = util.relative(sourceRoot, mapping.source);
  26936. }
  26937. mapping.originalLine = original.line;
  26938. mapping.originalColumn = original.column;
  26939. if (original.name != null) {
  26940. mapping.name = original.name;
  26941. }
  26942. }
  26943. }
  26944. var source = mapping.source;
  26945. if (source != null && !newSources.has(source)) {
  26946. newSources.add(source);
  26947. }
  26948. var name = mapping.name;
  26949. if (name != null && !newNames.has(name)) {
  26950. newNames.add(name);
  26951. }
  26952. }, this);
  26953. this._sources = newSources;
  26954. this._names = newNames;
  26955. aSourceMapConsumer.sources.forEach(function(sourceFile) {
  26956. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  26957. if (content != null) {
  26958. if (aSourceMapPath != null) {
  26959. sourceFile = util.join(aSourceMapPath, sourceFile);
  26960. }
  26961. if (sourceRoot != null) {
  26962. sourceFile = util.relative(sourceRoot, sourceFile);
  26963. }
  26964. this.setSourceContent(sourceFile, content);
  26965. }
  26966. }, this);
  26967. };
  26968. SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {
  26969. if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {
  26970. return;
  26971. } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {
  26972. return;
  26973. } else {
  26974. throw new Error('Invalid mapping: ' + JSON.stringify({
  26975. generated: aGenerated,
  26976. source: aSource,
  26977. original: aOriginal,
  26978. name: aName
  26979. }));
  26980. }
  26981. };
  26982. SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {
  26983. var previousGeneratedColumn = 0;
  26984. var previousGeneratedLine = 1;
  26985. var previousOriginalColumn = 0;
  26986. var previousOriginalLine = 0;
  26987. var previousName = 0;
  26988. var previousSource = 0;
  26989. var result = '';
  26990. var mapping;
  26991. var mappings = this._mappings.toArray();
  26992. for (var i = 0,
  26993. len = mappings.length; i < len; i++) {
  26994. mapping = mappings[i];
  26995. if (mapping.generatedLine !== previousGeneratedLine) {
  26996. previousGeneratedColumn = 0;
  26997. while (mapping.generatedLine !== previousGeneratedLine) {
  26998. result += ';';
  26999. previousGeneratedLine++;
  27000. }
  27001. } else {
  27002. if (i > 0) {
  27003. if (!util.compareByGeneratedPositions(mapping, mappings[i - 1])) {
  27004. continue;
  27005. }
  27006. result += ',';
  27007. }
  27008. }
  27009. result += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);
  27010. previousGeneratedColumn = mapping.generatedColumn;
  27011. if (mapping.source != null) {
  27012. result += base64VLQ.encode(this._sources.indexOf(mapping.source) - previousSource);
  27013. previousSource = this._sources.indexOf(mapping.source);
  27014. result += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);
  27015. previousOriginalLine = mapping.originalLine - 1;
  27016. result += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);
  27017. previousOriginalColumn = mapping.originalColumn;
  27018. if (mapping.name != null) {
  27019. result += base64VLQ.encode(this._names.indexOf(mapping.name) - previousName);
  27020. previousName = this._names.indexOf(mapping.name);
  27021. }
  27022. }
  27023. }
  27024. return result;
  27025. };
  27026. SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
  27027. return aSources.map(function(source) {
  27028. if (!this._sourcesContents) {
  27029. return null;
  27030. }
  27031. if (aSourceRoot != null) {
  27032. source = util.relative(aSourceRoot, source);
  27033. }
  27034. var key = util.toSetString(source);
  27035. return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;
  27036. }, this);
  27037. };
  27038. SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {
  27039. var map = {
  27040. version: this._version,
  27041. sources: this._sources.toArray(),
  27042. names: this._names.toArray(),
  27043. mappings: this._serializeMappings()
  27044. };
  27045. if (this._file != null) {
  27046. map.file = this._file;
  27047. }
  27048. if (this._sourceRoot != null) {
  27049. map.sourceRoot = this._sourceRoot;
  27050. }
  27051. if (this._sourcesContents) {
  27052. map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
  27053. }
  27054. return map;
  27055. };
  27056. SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {
  27057. return JSON.stringify(this);
  27058. };
  27059. exports.SourceMapGenerator = SourceMapGenerator;
  27060. });
  27061. define = makeDefine(m, './source-map-consumer');
  27062. if (typeof define !== 'function') {
  27063. var define = require('amdefine')(module, require);
  27064. }
  27065. define(function(require, exports, module) {
  27066. var util = require('./util');
  27067. var binarySearch = require('./binary-search');
  27068. var ArraySet = require('./array-set').ArraySet;
  27069. var base64VLQ = require('./base64-vlq');
  27070. function SourceMapConsumer(aSourceMap) {
  27071. var sourceMap = aSourceMap;
  27072. if (typeof aSourceMap === 'string') {
  27073. sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
  27074. }
  27075. var version = util.getArg(sourceMap, 'version');
  27076. var sources = util.getArg(sourceMap, 'sources');
  27077. var names = util.getArg(sourceMap, 'names', []);
  27078. var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  27079. var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  27080. var mappings = util.getArg(sourceMap, 'mappings');
  27081. var file = util.getArg(sourceMap, 'file', null);
  27082. if (version != this._version) {
  27083. throw new Error('Unsupported version: ' + version);
  27084. }
  27085. sources = sources.map(util.normalize);
  27086. this._names = ArraySet.fromArray(names, true);
  27087. this._sources = ArraySet.fromArray(sources, true);
  27088. this.sourceRoot = sourceRoot;
  27089. this.sourcesContent = sourcesContent;
  27090. this._mappings = mappings;
  27091. this.file = file;
  27092. }
  27093. SourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {
  27094. var smc = Object.create(SourceMapConsumer.prototype);
  27095. smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
  27096. smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
  27097. smc.sourceRoot = aSourceMap._sourceRoot;
  27098. smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);
  27099. smc.file = aSourceMap._file;
  27100. smc.__generatedMappings = aSourceMap._mappings.toArray().slice();
  27101. smc.__originalMappings = aSourceMap._mappings.toArray().slice().sort(util.compareByOriginalPositions);
  27102. return smc;
  27103. };
  27104. SourceMapConsumer.prototype._version = 3;
  27105. Object.defineProperty(SourceMapConsumer.prototype, 'sources', {get: function() {
  27106. return this._sources.toArray().map(function(s) {
  27107. return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
  27108. }, this);
  27109. }});
  27110. SourceMapConsumer.prototype.__generatedMappings = null;
  27111. Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {get: function() {
  27112. if (!this.__generatedMappings) {
  27113. this.__generatedMappings = [];
  27114. this.__originalMappings = [];
  27115. this._parseMappings(this._mappings, this.sourceRoot);
  27116. }
  27117. return this.__generatedMappings;
  27118. }});
  27119. SourceMapConsumer.prototype.__originalMappings = null;
  27120. Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {get: function() {
  27121. if (!this.__originalMappings) {
  27122. this.__generatedMappings = [];
  27123. this.__originalMappings = [];
  27124. this._parseMappings(this._mappings, this.sourceRoot);
  27125. }
  27126. return this.__originalMappings;
  27127. }});
  27128. SourceMapConsumer.prototype._nextCharIsMappingSeparator = function SourceMapConsumer_nextCharIsMappingSeparator(aStr) {
  27129. var c = aStr.charAt(0);
  27130. return c === ";" || c === ",";
  27131. };
  27132. SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
  27133. var generatedLine = 1;
  27134. var previousGeneratedColumn = 0;
  27135. var previousOriginalLine = 0;
  27136. var previousOriginalColumn = 0;
  27137. var previousSource = 0;
  27138. var previousName = 0;
  27139. var str = aStr;
  27140. var temp = {};
  27141. var mapping;
  27142. while (str.length > 0) {
  27143. if (str.charAt(0) === ';') {
  27144. generatedLine++;
  27145. str = str.slice(1);
  27146. previousGeneratedColumn = 0;
  27147. } else if (str.charAt(0) === ',') {
  27148. str = str.slice(1);
  27149. } else {
  27150. mapping = {};
  27151. mapping.generatedLine = generatedLine;
  27152. base64VLQ.decode(str, temp);
  27153. mapping.generatedColumn = previousGeneratedColumn + temp.value;
  27154. previousGeneratedColumn = mapping.generatedColumn;
  27155. str = temp.rest;
  27156. if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
  27157. base64VLQ.decode(str, temp);
  27158. mapping.source = this._sources.at(previousSource + temp.value);
  27159. previousSource += temp.value;
  27160. str = temp.rest;
  27161. if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
  27162. throw new Error('Found a source, but no line and column');
  27163. }
  27164. base64VLQ.decode(str, temp);
  27165. mapping.originalLine = previousOriginalLine + temp.value;
  27166. previousOriginalLine = mapping.originalLine;
  27167. mapping.originalLine += 1;
  27168. str = temp.rest;
  27169. if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
  27170. throw new Error('Found a source and line, but no column');
  27171. }
  27172. base64VLQ.decode(str, temp);
  27173. mapping.originalColumn = previousOriginalColumn + temp.value;
  27174. previousOriginalColumn = mapping.originalColumn;
  27175. str = temp.rest;
  27176. if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
  27177. base64VLQ.decode(str, temp);
  27178. mapping.name = this._names.at(previousName + temp.value);
  27179. previousName += temp.value;
  27180. str = temp.rest;
  27181. }
  27182. }
  27183. this.__generatedMappings.push(mapping);
  27184. if (typeof mapping.originalLine === 'number') {
  27185. this.__originalMappings.push(mapping);
  27186. }
  27187. }
  27188. }
  27189. this.__generatedMappings.sort(util.compareByGeneratedPositions);
  27190. this.__originalMappings.sort(util.compareByOriginalPositions);
  27191. };
  27192. SourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator) {
  27193. if (aNeedle[aLineName] <= 0) {
  27194. throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);
  27195. }
  27196. if (aNeedle[aColumnName] < 0) {
  27197. throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);
  27198. }
  27199. return binarySearch.search(aNeedle, aMappings, aComparator);
  27200. };
  27201. SourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {
  27202. for (var index = 0; index < this._generatedMappings.length; ++index) {
  27203. var mapping = this._generatedMappings[index];
  27204. if (index + 1 < this._generatedMappings.length) {
  27205. var nextMapping = this._generatedMappings[index + 1];
  27206. if (mapping.generatedLine === nextMapping.generatedLine) {
  27207. mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
  27208. continue;
  27209. }
  27210. }
  27211. mapping.lastGeneratedColumn = Infinity;
  27212. }
  27213. };
  27214. SourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {
  27215. var needle = {
  27216. generatedLine: util.getArg(aArgs, 'line'),
  27217. generatedColumn: util.getArg(aArgs, 'column')
  27218. };
  27219. var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositions);
  27220. if (index >= 0) {
  27221. var mapping = this._generatedMappings[index];
  27222. if (mapping.generatedLine === needle.generatedLine) {
  27223. var source = util.getArg(mapping, 'source', null);
  27224. if (source != null && this.sourceRoot != null) {
  27225. source = util.join(this.sourceRoot, source);
  27226. }
  27227. return {
  27228. source: source,
  27229. line: util.getArg(mapping, 'originalLine', null),
  27230. column: util.getArg(mapping, 'originalColumn', null),
  27231. name: util.getArg(mapping, 'name', null)
  27232. };
  27233. }
  27234. }
  27235. return {
  27236. source: null,
  27237. line: null,
  27238. column: null,
  27239. name: null
  27240. };
  27241. };
  27242. SourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource) {
  27243. if (!this.sourcesContent) {
  27244. return null;
  27245. }
  27246. if (this.sourceRoot != null) {
  27247. aSource = util.relative(this.sourceRoot, aSource);
  27248. }
  27249. if (this._sources.has(aSource)) {
  27250. return this.sourcesContent[this._sources.indexOf(aSource)];
  27251. }
  27252. var url;
  27253. if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {
  27254. var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
  27255. if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) {
  27256. return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];
  27257. }
  27258. if ((!url.path || url.path == "/") && this._sources.has("/" + aSource)) {
  27259. return this.sourcesContent[this._sources.indexOf("/" + aSource)];
  27260. }
  27261. }
  27262. throw new Error('"' + aSource + '" is not in the SourceMap.');
  27263. };
  27264. SourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {
  27265. var needle = {
  27266. source: util.getArg(aArgs, 'source'),
  27267. originalLine: util.getArg(aArgs, 'line'),
  27268. originalColumn: util.getArg(aArgs, 'column')
  27269. };
  27270. if (this.sourceRoot != null) {
  27271. needle.source = util.relative(this.sourceRoot, needle.source);
  27272. }
  27273. var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions);
  27274. if (index >= 0) {
  27275. var mapping = this._originalMappings[index];
  27276. return {
  27277. line: util.getArg(mapping, 'generatedLine', null),
  27278. column: util.getArg(mapping, 'generatedColumn', null),
  27279. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  27280. };
  27281. }
  27282. return {
  27283. line: null,
  27284. column: null,
  27285. lastColumn: null
  27286. };
  27287. };
  27288. SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
  27289. var needle = {
  27290. source: util.getArg(aArgs, 'source'),
  27291. originalLine: util.getArg(aArgs, 'line'),
  27292. originalColumn: Infinity
  27293. };
  27294. if (this.sourceRoot != null) {
  27295. needle.source = util.relative(this.sourceRoot, needle.source);
  27296. }
  27297. var mappings = [];
  27298. var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions);
  27299. if (index >= 0) {
  27300. var mapping = this._originalMappings[index];
  27301. while (mapping && mapping.originalLine === needle.originalLine) {
  27302. mappings.push({
  27303. line: util.getArg(mapping, 'generatedLine', null),
  27304. column: util.getArg(mapping, 'generatedColumn', null),
  27305. lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
  27306. });
  27307. mapping = this._originalMappings[--index];
  27308. }
  27309. }
  27310. return mappings.reverse();
  27311. };
  27312. SourceMapConsumer.GENERATED_ORDER = 1;
  27313. SourceMapConsumer.ORIGINAL_ORDER = 2;
  27314. SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
  27315. var context = aContext || null;
  27316. var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
  27317. var mappings;
  27318. switch (order) {
  27319. case SourceMapConsumer.GENERATED_ORDER:
  27320. mappings = this._generatedMappings;
  27321. break;
  27322. case SourceMapConsumer.ORIGINAL_ORDER:
  27323. mappings = this._originalMappings;
  27324. break;
  27325. default:
  27326. throw new Error("Unknown order of iteration.");
  27327. }
  27328. var sourceRoot = this.sourceRoot;
  27329. mappings.map(function(mapping) {
  27330. var source = mapping.source;
  27331. if (source != null && sourceRoot != null) {
  27332. source = util.join(sourceRoot, source);
  27333. }
  27334. return {
  27335. source: source,
  27336. generatedLine: mapping.generatedLine,
  27337. generatedColumn: mapping.generatedColumn,
  27338. originalLine: mapping.originalLine,
  27339. originalColumn: mapping.originalColumn,
  27340. name: mapping.name
  27341. };
  27342. }).forEach(aCallback, context);
  27343. };
  27344. exports.SourceMapConsumer = SourceMapConsumer;
  27345. });
  27346. define = makeDefine(m, './source-node');
  27347. if (typeof define !== 'function') {
  27348. var define = require('amdefine')(module, require);
  27349. }
  27350. define(function(require, exports, module) {
  27351. var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
  27352. var util = require('./util');
  27353. var REGEX_NEWLINE = /(\r?\n)/;
  27354. var NEWLINE_CODE = 10;
  27355. var isSourceNode = "$$$isSourceNode$$$";
  27356. function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  27357. this.children = [];
  27358. this.sourceContents = {};
  27359. this.line = aLine == null ? null : aLine;
  27360. this.column = aColumn == null ? null : aColumn;
  27361. this.source = aSource == null ? null : aSource;
  27362. this.name = aName == null ? null : aName;
  27363. this[isSourceNode] = true;
  27364. if (aChunks != null)
  27365. this.add(aChunks);
  27366. }
  27367. SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
  27368. var node = new SourceNode();
  27369. var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
  27370. var shiftNextLine = function() {
  27371. var lineContents = remainingLines.shift();
  27372. var newLine = remainingLines.shift() || "";
  27373. return lineContents + newLine;
  27374. };
  27375. var lastGeneratedLine = 1,
  27376. lastGeneratedColumn = 0;
  27377. var lastMapping = null;
  27378. aSourceMapConsumer.eachMapping(function(mapping) {
  27379. if (lastMapping !== null) {
  27380. if (lastGeneratedLine < mapping.generatedLine) {
  27381. var code = "";
  27382. addMappingWithCode(lastMapping, shiftNextLine());
  27383. lastGeneratedLine++;
  27384. lastGeneratedColumn = 0;
  27385. } else {
  27386. var nextLine = remainingLines[0];
  27387. var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);
  27388. remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);
  27389. lastGeneratedColumn = mapping.generatedColumn;
  27390. addMappingWithCode(lastMapping, code);
  27391. lastMapping = mapping;
  27392. return;
  27393. }
  27394. }
  27395. while (lastGeneratedLine < mapping.generatedLine) {
  27396. node.add(shiftNextLine());
  27397. lastGeneratedLine++;
  27398. }
  27399. if (lastGeneratedColumn < mapping.generatedColumn) {
  27400. var nextLine = remainingLines[0];
  27401. node.add(nextLine.substr(0, mapping.generatedColumn));
  27402. remainingLines[0] = nextLine.substr(mapping.generatedColumn);
  27403. lastGeneratedColumn = mapping.generatedColumn;
  27404. }
  27405. lastMapping = mapping;
  27406. }, this);
  27407. if (remainingLines.length > 0) {
  27408. if (lastMapping) {
  27409. addMappingWithCode(lastMapping, shiftNextLine());
  27410. }
  27411. node.add(remainingLines.join(""));
  27412. }
  27413. aSourceMapConsumer.sources.forEach(function(sourceFile) {
  27414. var content = aSourceMapConsumer.sourceContentFor(sourceFile);
  27415. if (content != null) {
  27416. if (aRelativePath != null) {
  27417. sourceFile = util.join(aRelativePath, sourceFile);
  27418. }
  27419. node.setSourceContent(sourceFile, content);
  27420. }
  27421. });
  27422. return node;
  27423. function addMappingWithCode(mapping, code) {
  27424. if (mapping === null || mapping.source === undefined) {
  27425. node.add(code);
  27426. } else {
  27427. var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;
  27428. node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));
  27429. }
  27430. }
  27431. };
  27432. SourceNode.prototype.add = function SourceNode_add(aChunk) {
  27433. if (Array.isArray(aChunk)) {
  27434. aChunk.forEach(function(chunk) {
  27435. this.add(chunk);
  27436. }, this);
  27437. } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  27438. if (aChunk) {
  27439. this.children.push(aChunk);
  27440. }
  27441. } else {
  27442. throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
  27443. }
  27444. return this;
  27445. };
  27446. SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  27447. if (Array.isArray(aChunk)) {
  27448. for (var i = aChunk.length - 1; i >= 0; i--) {
  27449. this.prepend(aChunk[i]);
  27450. }
  27451. } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
  27452. this.children.unshift(aChunk);
  27453. } else {
  27454. throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
  27455. }
  27456. return this;
  27457. };
  27458. SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  27459. var chunk;
  27460. for (var i = 0,
  27461. len = this.children.length; i < len; i++) {
  27462. chunk = this.children[i];
  27463. if (chunk[isSourceNode]) {
  27464. chunk.walk(aFn);
  27465. } else {
  27466. if (chunk !== '') {
  27467. aFn(chunk, {
  27468. source: this.source,
  27469. line: this.line,
  27470. column: this.column,
  27471. name: this.name
  27472. });
  27473. }
  27474. }
  27475. }
  27476. };
  27477. SourceNode.prototype.join = function SourceNode_join(aSep) {
  27478. var newChildren;
  27479. var i;
  27480. var len = this.children.length;
  27481. if (len > 0) {
  27482. newChildren = [];
  27483. for (i = 0; i < len - 1; i++) {
  27484. newChildren.push(this.children[i]);
  27485. newChildren.push(aSep);
  27486. }
  27487. newChildren.push(this.children[i]);
  27488. this.children = newChildren;
  27489. }
  27490. return this;
  27491. };
  27492. SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  27493. var lastChild = this.children[this.children.length - 1];
  27494. if (lastChild[isSourceNode]) {
  27495. lastChild.replaceRight(aPattern, aReplacement);
  27496. } else if (typeof lastChild === 'string') {
  27497. this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  27498. } else {
  27499. this.children.push(''.replace(aPattern, aReplacement));
  27500. }
  27501. return this;
  27502. };
  27503. SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
  27504. this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  27505. };
  27506. SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {
  27507. for (var i = 0,
  27508. len = this.children.length; i < len; i++) {
  27509. if (this.children[i][isSourceNode]) {
  27510. this.children[i].walkSourceContents(aFn);
  27511. }
  27512. }
  27513. var sources = Object.keys(this.sourceContents);
  27514. for (var i = 0,
  27515. len = sources.length; i < len; i++) {
  27516. aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
  27517. }
  27518. };
  27519. SourceNode.prototype.toString = function SourceNode_toString() {
  27520. var str = "";
  27521. this.walk(function(chunk) {
  27522. str += chunk;
  27523. });
  27524. return str;
  27525. };
  27526. SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  27527. var generated = {
  27528. code: "",
  27529. line: 1,
  27530. column: 0
  27531. };
  27532. var map = new SourceMapGenerator(aArgs);
  27533. var sourceMappingActive = false;
  27534. var lastOriginalSource = null;
  27535. var lastOriginalLine = null;
  27536. var lastOriginalColumn = null;
  27537. var lastOriginalName = null;
  27538. this.walk(function(chunk, original) {
  27539. generated.code += chunk;
  27540. if (original.source !== null && original.line !== null && original.column !== null) {
  27541. if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {
  27542. map.addMapping({
  27543. source: original.source,
  27544. original: {
  27545. line: original.line,
  27546. column: original.column
  27547. },
  27548. generated: {
  27549. line: generated.line,
  27550. column: generated.column
  27551. },
  27552. name: original.name
  27553. });
  27554. }
  27555. lastOriginalSource = original.source;
  27556. lastOriginalLine = original.line;
  27557. lastOriginalColumn = original.column;
  27558. lastOriginalName = original.name;
  27559. sourceMappingActive = true;
  27560. } else if (sourceMappingActive) {
  27561. map.addMapping({generated: {
  27562. line: generated.line,
  27563. column: generated.column
  27564. }});
  27565. lastOriginalSource = null;
  27566. sourceMappingActive = false;
  27567. }
  27568. for (var idx = 0,
  27569. length = chunk.length; idx < length; idx++) {
  27570. if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
  27571. generated.line++;
  27572. generated.column = 0;
  27573. if (idx + 1 === length) {
  27574. lastOriginalSource = null;
  27575. sourceMappingActive = false;
  27576. } else if (sourceMappingActive) {
  27577. map.addMapping({
  27578. source: original.source,
  27579. original: {
  27580. line: original.line,
  27581. column: original.column
  27582. },
  27583. generated: {
  27584. line: generated.line,
  27585. column: generated.column
  27586. },
  27587. name: original.name
  27588. });
  27589. }
  27590. } else {
  27591. generated.column++;
  27592. }
  27593. }
  27594. });
  27595. this.walkSourceContents(function(sourceFile, sourceContent) {
  27596. map.setSourceContent(sourceFile, sourceContent);
  27597. });
  27598. return {
  27599. code: generated.code,
  27600. map: map
  27601. };
  27602. };
  27603. exports.SourceNode = SourceNode;
  27604. });
  27605. var SourceMapGenerator = m['./source-map-generator'].SourceMapGenerator;
  27606. var SourceMapConsumer = m['./source-map-consumer'].SourceMapConsumer;
  27607. var SourceNode = m['./source-node'].SourceNode;
  27608. var join = m['./util'].join;
  27609. return {
  27610. get SourceMapGenerator() {
  27611. return SourceMapGenerator;
  27612. },
  27613. get SourceMapConsumer() {
  27614. return SourceMapConsumer;
  27615. },
  27616. get SourceNode() {
  27617. return SourceNode;
  27618. },
  27619. get join() {
  27620. return join;
  27621. }
  27622. };
  27623. });
  27624. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/toSource.js", [], function() {
  27625. "use strict";
  27626. var __moduleName = "traceur@0.0.112/src/outputgeneration/toSource.js";
  27627. var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeMapWriter.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).ParseTreeMapWriter;
  27628. var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeWriter.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).ParseTreeWriter;
  27629. var SourceMapGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SourceMapIntegration.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).SourceMapGenerator;
  27630. function toSource(tree) {
  27631. var options = arguments[1];
  27632. var outputName = arguments[2] !== (void 0) ? arguments[2] : '<toSourceOutput>';
  27633. var sourceRoot = arguments[3];
  27634. var sourceMapGenerator = options && options.sourceMapGenerator;
  27635. var sourcemaps = options && options.sourceMaps;
  27636. if (!sourceMapGenerator && sourcemaps) {
  27637. sourceMapGenerator = new SourceMapGenerator({
  27638. file: outputName,
  27639. sourceRoot: sourceRoot,
  27640. skipValidation: true
  27641. });
  27642. }
  27643. var sourceMapConfiguration = {
  27644. sourceMapGenerator: sourceMapGenerator,
  27645. sourceRoot: sourceRoot,
  27646. lowResolution: options && options.lowResolutionSourceMap
  27647. };
  27648. var writer;
  27649. if (sourceMapGenerator)
  27650. writer = new ParseTreeMapWriter(sourceMapConfiguration, options);
  27651. else
  27652. writer = new ParseTreeWriter(options);
  27653. writer.visitAny(tree);
  27654. return [writer.toString(), sourceMapGenerator && sourceMapGenerator.toString()];
  27655. }
  27656. return {get toSource() {
  27657. return toSource;
  27658. }};
  27659. });
  27660. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/TreeWriter.js", [], function() {
  27661. "use strict";
  27662. var __moduleName = "traceur@0.0.112/src/outputgeneration/TreeWriter.js";
  27663. var toSource = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./toSource.js", "traceur@0.0.112/src/outputgeneration/TreeWriter.js")).toSource;
  27664. function write(tree) {
  27665. var $__2,
  27666. $__3;
  27667. var options = arguments[1];
  27668. var outputName = arguments[2] !== (void 0) ? arguments[2] : '<TreeWriter-output>';
  27669. var sourceRoot = arguments[3];
  27670. var $__1 = toSource(tree, options, outputName, sourceRoot),
  27671. result = ($__2 = $__1[Symbol.iterator](), ($__3 = $__2.next()).done ? void 0 : $__3.value),
  27672. sourceMap = ($__3 = $__2.next()).done ? void 0 : $__3.value;
  27673. if (sourceMap)
  27674. options.generatedSourceMap = sourceMap;
  27675. return result;
  27676. }
  27677. var TreeWriter = function() {
  27678. function TreeWriter() {}
  27679. return ($traceurRuntime.createClass)(TreeWriter, {}, {});
  27680. }();
  27681. TreeWriter.write = write;
  27682. return {
  27683. get write() {
  27684. return write;
  27685. },
  27686. get TreeWriter() {
  27687. return TreeWriter;
  27688. }
  27689. };
  27690. });
  27691. $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/ParseTreeValidator.js", [], function() {
  27692. "use strict";
  27693. var __moduleName = "traceur@0.0.112/src/syntax/ParseTreeValidator.js";
  27694. var NewExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).NewExpression;
  27695. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeVisitor.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).ParseTreeVisitor;
  27696. var TreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../outputgeneration/TreeWriter.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).TreeWriter;
  27697. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")),
  27698. AMPERSAND = $__7.AMPERSAND,
  27699. AMPERSAND_EQUAL = $__7.AMPERSAND_EQUAL,
  27700. AND = $__7.AND,
  27701. BAR = $__7.BAR,
  27702. BAR_EQUAL = $__7.BAR_EQUAL,
  27703. CARET = $__7.CARET,
  27704. CARET_EQUAL = $__7.CARET_EQUAL,
  27705. CLOSE_ANGLE = $__7.CLOSE_ANGLE,
  27706. EQUAL = $__7.EQUAL,
  27707. EQUAL_EQUAL = $__7.EQUAL_EQUAL,
  27708. EQUAL_EQUAL_EQUAL = $__7.EQUAL_EQUAL_EQUAL,
  27709. GREATER_EQUAL = $__7.GREATER_EQUAL,
  27710. IDENTIFIER = $__7.IDENTIFIER,
  27711. IN = $__7.IN,
  27712. INSTANCEOF = $__7.INSTANCEOF,
  27713. LEFT_SHIFT = $__7.LEFT_SHIFT,
  27714. LEFT_SHIFT_EQUAL = $__7.LEFT_SHIFT_EQUAL,
  27715. LESS_EQUAL = $__7.LESS_EQUAL,
  27716. MINUS = $__7.MINUS,
  27717. MINUS_EQUAL = $__7.MINUS_EQUAL,
  27718. NOT_EQUAL = $__7.NOT_EQUAL,
  27719. NOT_EQUAL_EQUAL = $__7.NOT_EQUAL_EQUAL,
  27720. NUMBER = $__7.NUMBER,
  27721. OPEN_ANGLE = $__7.OPEN_ANGLE,
  27722. OR = $__7.OR,
  27723. PERCENT = $__7.PERCENT,
  27724. PERCENT_EQUAL = $__7.PERCENT_EQUAL,
  27725. PLUS = $__7.PLUS,
  27726. PLUS_EQUAL = $__7.PLUS_EQUAL,
  27727. RIGHT_SHIFT = $__7.RIGHT_SHIFT,
  27728. RIGHT_SHIFT_EQUAL = $__7.RIGHT_SHIFT_EQUAL,
  27729. SLASH = $__7.SLASH,
  27730. SLASH_EQUAL = $__7.SLASH_EQUAL,
  27731. STAR = $__7.STAR,
  27732. STAR_EQUAL = $__7.STAR_EQUAL,
  27733. STAR_STAR = $__7.STAR_STAR,
  27734. STAR_STAR_EQUAL = $__7.STAR_STAR_EQUAL,
  27735. STRING = $__7.STRING,
  27736. UNSIGNED_RIGHT_SHIFT = $__7.UNSIGNED_RIGHT_SHIFT,
  27737. UNSIGNED_RIGHT_SHIFT_EQUAL = $__7.UNSIGNED_RIGHT_SHIFT_EQUAL,
  27738. YIELD = $__7.YIELD;
  27739. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTreeType.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")),
  27740. ARRAY_PATTERN = $__8.ARRAY_PATTERN,
  27741. ASSIGNMENT_ELEMENT = $__8.ASSIGNMENT_ELEMENT,
  27742. BINDING_ELEMENT = $__8.BINDING_ELEMENT,
  27743. BINDING_IDENTIFIER = $__8.BINDING_IDENTIFIER,
  27744. BLOCK = $__8.BLOCK,
  27745. CASE_CLAUSE = $__8.CASE_CLAUSE,
  27746. CATCH = $__8.CATCH,
  27747. CLASS_DECLARATION = $__8.CLASS_DECLARATION,
  27748. COMPUTED_PROPERTY_NAME = $__8.COMPUTED_PROPERTY_NAME,
  27749. DEFAULT_CLAUSE = $__8.DEFAULT_CLAUSE,
  27750. EXPORT_DEFAULT = $__8.EXPORT_DEFAULT,
  27751. EXPORT_SPECIFIER = $__8.EXPORT_SPECIFIER,
  27752. EXPORT_SPECIFIER_SET = $__8.EXPORT_SPECIFIER_SET,
  27753. EXPORT_STAR = $__8.EXPORT_STAR,
  27754. FINALLY = $__8.FINALLY,
  27755. FORMAL_PARAMETER = $__8.FORMAL_PARAMETER,
  27756. FORMAL_PARAMETER_LIST = $__8.FORMAL_PARAMETER_LIST,
  27757. FORWARD_DEFAULT_EXPORT = $__8.FORWARD_DEFAULT_EXPORT,
  27758. FUNCTION_BODY = $__8.FUNCTION_BODY,
  27759. FUNCTION_DECLARATION = $__8.FUNCTION_DECLARATION,
  27760. GET_ACCESSOR = $__8.GET_ACCESSOR,
  27761. IDENTIFIER_EXPRESSION = $__8.IDENTIFIER_EXPRESSION,
  27762. IMPORTED_BINDING = $__8.IMPORTED_BINDING,
  27763. IMPORT_CLAUSE_PAIR = $__8.IMPORT_CLAUSE_PAIR,
  27764. IMPORT_SPECIFIER_SET = $__8.IMPORT_SPECIFIER_SET,
  27765. IMPORT_TYPE_CLAUSE = $__8.IMPORT_TYPE_CLAUSE,
  27766. JSX_ATTRIBUTE = $__8.JSX_ATTRIBUTE,
  27767. JSX_ELEMENT_NAME = $__8.JSX_ELEMENT_NAME,
  27768. JSX_ELEMENT = $__8.JSX_ELEMENT,
  27769. JSX_PLACEHOLDER = $__8.JSX_PLACEHOLDER,
  27770. JSX_SPREAD_ATTRIBUTE = $__8.JSX_SPREAD_ATTRIBUTE,
  27771. JSX_TEXT = $__8.JSX_TEXT,
  27772. LITERAL_PROPERTY_NAME = $__8.LITERAL_PROPERTY_NAME,
  27773. METHOD = $__8.METHOD,
  27774. MODULE_SPECIFIER = $__8.MODULE_SPECIFIER,
  27775. NAMED_EXPORT = $__8.NAMED_EXPORT,
  27776. NAME_SPACE_EXPORT = $__8.NAME_SPACE_EXPORT,
  27777. NAME_SPACE_IMPORT = $__8.NAME_SPACE_IMPORT,
  27778. OBJECT_PATTERN = $__8.OBJECT_PATTERN,
  27779. OBJECT_PATTERN_FIELD = $__8.OBJECT_PATTERN_FIELD,
  27780. PROPERTY_NAME_ASSIGNMENT = $__8.PROPERTY_NAME_ASSIGNMENT,
  27781. PROPERTY_NAME_SHORTHAND = $__8.PROPERTY_NAME_SHORTHAND,
  27782. PROPERTY_VARIABLE_DECLARATION = $__8.PROPERTY_VARIABLE_DECLARATION,
  27783. REST_PARAMETER = $__8.REST_PARAMETER,
  27784. SET_ACCESSOR = $__8.SET_ACCESSOR,
  27785. SPREAD_EXPRESSION = $__8.SPREAD_EXPRESSION,
  27786. TEMPLATE_LITERAL_PORTION = $__8.TEMPLATE_LITERAL_PORTION,
  27787. TEMPLATE_SUBSTITUTION = $__8.TEMPLATE_SUBSTITUTION,
  27788. TYPE_ALIAS_DECLARATION = $__8.TYPE_ALIAS_DECLARATION,
  27789. TYPE_ARGUMENTS = $__8.TYPE_ARGUMENTS,
  27790. TYPE_NAME = $__8.TYPE_NAME,
  27791. TYPE_PARAMETER = $__8.TYPE_PARAMETER,
  27792. TYPE_PARAMETERS = $__8.TYPE_PARAMETERS,
  27793. VARIABLE_DECLARATION_LIST = $__8.VARIABLE_DECLARATION_LIST,
  27794. VARIABLE_STATEMENT = $__8.VARIABLE_STATEMENT;
  27795. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).assert;
  27796. var ValidationError = function($__super) {
  27797. function ValidationError(tree, message) {
  27798. $traceurRuntime.superConstructor(ValidationError).call(this);
  27799. this.tree = tree;
  27800. this.message = message;
  27801. }
  27802. return ($traceurRuntime.createClass)(ValidationError, {}, {}, $__super);
  27803. }(Error);
  27804. var ParseTreeValidator = function($__super) {
  27805. function ParseTreeValidator() {
  27806. $traceurRuntime.superConstructor(ParseTreeValidator).apply(this, arguments);
  27807. }
  27808. return ($traceurRuntime.createClass)(ParseTreeValidator, {
  27809. fail_: function(tree, message) {
  27810. throw new ValidationError(tree, message);
  27811. },
  27812. check_: function(condition, tree, message) {
  27813. if (!condition) {
  27814. this.fail_(tree, message);
  27815. }
  27816. },
  27817. checkVisit_: function(condition, tree, message) {
  27818. this.check_(condition, tree, message);
  27819. this.visitAny(tree);
  27820. },
  27821. checkType_: function(type, tree, message) {
  27822. this.checkVisit_(tree.type === type, tree, message);
  27823. },
  27824. visitArgumentList: function(tree) {
  27825. for (var i = 0; i < tree.args.length; i++) {
  27826. var argument = tree.args[i];
  27827. this.checkVisit_(argument.isAssignmentOrSpread(), argument, 'assignment or spread expected');
  27828. }
  27829. },
  27830. visitArrayLiteral: function(tree) {
  27831. for (var i = 0; i < tree.elements.length; i++) {
  27832. var element = tree.elements[i];
  27833. this.checkVisit_(element === null || element.isAssignmentOrSpread(), element, 'assignment or spread expected');
  27834. }
  27835. },
  27836. visitArrayPattern: function(tree) {
  27837. for (var i = 0; i < tree.elements.length; i++) {
  27838. var element = tree.elements[i];
  27839. this.checkVisit_(element === null || element.type === BINDING_ELEMENT || element.type === ASSIGNMENT_ELEMENT || element.isLeftHandSideExpression() || element.isPattern() || element.isSpreadPatternElement(), element, 'null, sub pattern, left hand side expression or spread expected');
  27840. if (element && element.isSpreadPatternElement()) {
  27841. this.check_(i === (tree.elements.length - 1), element, 'spread in array patterns must be the last element');
  27842. }
  27843. }
  27844. },
  27845. visitBinaryExpression: function(tree) {
  27846. switch (tree.operator.type) {
  27847. case EQUAL:
  27848. case STAR_EQUAL:
  27849. case STAR_STAR_EQUAL:
  27850. case SLASH_EQUAL:
  27851. case PERCENT_EQUAL:
  27852. case PLUS_EQUAL:
  27853. case MINUS_EQUAL:
  27854. case LEFT_SHIFT_EQUAL:
  27855. case RIGHT_SHIFT_EQUAL:
  27856. case UNSIGNED_RIGHT_SHIFT_EQUAL:
  27857. case AMPERSAND_EQUAL:
  27858. case CARET_EQUAL:
  27859. case BAR_EQUAL:
  27860. this.check_(tree.left.isLeftHandSideExpression() || tree.left.isPattern(), tree.left, 'left hand side expression or pattern expected');
  27861. this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected');
  27862. break;
  27863. case AND:
  27864. case OR:
  27865. case BAR:
  27866. case CARET:
  27867. case AMPERSAND:
  27868. case EQUAL_EQUAL:
  27869. case NOT_EQUAL:
  27870. case EQUAL_EQUAL_EQUAL:
  27871. case NOT_EQUAL_EQUAL:
  27872. case OPEN_ANGLE:
  27873. case CLOSE_ANGLE:
  27874. case GREATER_EQUAL:
  27875. case LESS_EQUAL:
  27876. case INSTANCEOF:
  27877. case IN:
  27878. case LEFT_SHIFT:
  27879. case RIGHT_SHIFT:
  27880. case UNSIGNED_RIGHT_SHIFT:
  27881. case PLUS:
  27882. case MINUS:
  27883. case STAR:
  27884. case SLASH:
  27885. case PERCENT:
  27886. case STAR_STAR:
  27887. this.check_(tree.left.isAssignmentExpression(), tree.left, 'assignment expression expected');
  27888. this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected');
  27889. break;
  27890. default:
  27891. this.fail_(tree, 'unexpected binary operator');
  27892. }
  27893. this.visitAny(tree.left);
  27894. this.visitAny(tree.right);
  27895. },
  27896. visitBindingElement: function(tree) {
  27897. var binding = tree.binding;
  27898. this.checkVisit_(binding.type === BINDING_IDENTIFIER || binding.type === OBJECT_PATTERN || binding.type === ARRAY_PATTERN, binding, 'expected valid binding element');
  27899. this.visitAny(tree.initializer);
  27900. },
  27901. visitAssignmentElement: function(tree) {
  27902. var assignment = tree.assignment;
  27903. this.checkVisit_(assignment.type === OBJECT_PATTERN || assignment.type === ARRAY_PATTERN || assignment.isLeftHandSideExpression(), assignment, 'expected valid assignment element');
  27904. this.visitAny(tree.initializer);
  27905. },
  27906. visitBlock: function(tree) {
  27907. for (var i = 0; i < tree.statements.length; i++) {
  27908. var statement = tree.statements[i];
  27909. this.checkVisit_(statement.isStatementListItem(), statement, 'statement or function declaration expected');
  27910. }
  27911. },
  27912. visitCallExpression: function(tree) {
  27913. this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');
  27914. if (tree.operand instanceof NewExpression) {
  27915. this.check_(tree.operand.args !== null, tree.operand, 'new args expected');
  27916. }
  27917. this.visitAny(tree.operand);
  27918. this.visitAny(tree.args);
  27919. },
  27920. visitCaseClause: function(tree) {
  27921. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  27922. for (var i = 0; i < tree.statements.length; i++) {
  27923. var statement = tree.statements[i];
  27924. this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected');
  27925. }
  27926. },
  27927. visitCatch: function(tree) {
  27928. this.checkVisit_(tree.binding.isPattern() || tree.binding.type === BINDING_IDENTIFIER, tree.binding, 'binding identifier expected');
  27929. this.checkVisit_(tree.catchBody.type === BLOCK, tree.catchBody, 'block expected');
  27930. },
  27931. visitClassDeclaration: function(tree) {
  27932. this.visitClassShared_(tree);
  27933. },
  27934. visitClassExpression: function(tree) {
  27935. this.visitClassShared_(tree);
  27936. },
  27937. visitClassShared_: function(tree) {
  27938. if (tree.typeParameters) {
  27939. this.checkVisit_(tree.typeParameters.type === TYPE_PARAMETERS, tree.typeParameters, 'type parameters expected');
  27940. }
  27941. for (var i = 0; i < tree.elements.length; i++) {
  27942. var element = tree.elements[i];
  27943. switch (element.type) {
  27944. case GET_ACCESSOR:
  27945. case SET_ACCESSOR:
  27946. case METHOD:
  27947. case PROPERTY_VARIABLE_DECLARATION:
  27948. break;
  27949. default:
  27950. this.fail_(element, 'class element expected');
  27951. }
  27952. this.visitAny(element);
  27953. }
  27954. },
  27955. visitCommaExpression: function(tree) {
  27956. for (var i = 0; i < tree.expressions.length; i++) {
  27957. var expression = tree.expressions[i];
  27958. this.checkVisit_(expression.isExpression(), expression, 'expression expected');
  27959. }
  27960. },
  27961. visitConditionalExpression: function(tree) {
  27962. this.checkVisit_(tree.condition.isAssignmentExpression(), tree.condition, 'expression expected');
  27963. this.checkVisit_(tree.left.isAssignmentExpression(), tree.left, 'expression expected');
  27964. this.checkVisit_(tree.right.isAssignmentExpression(), tree.right, 'expression expected');
  27965. },
  27966. visitCoverFormals: function(tree) {
  27967. this.fail_(tree, 'CoverFormals should have been removed');
  27968. },
  27969. visitCoverInitializedName: function(tree) {
  27970. this.fail_(tree, 'CoverInitializedName should have been removed');
  27971. },
  27972. visitDefaultClause: function(tree) {
  27973. for (var i = 0; i < tree.statements.length; i++) {
  27974. var statement = tree.statements[i];
  27975. this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected');
  27976. }
  27977. },
  27978. visitDoWhileStatement: function(tree) {
  27979. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  27980. this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');
  27981. },
  27982. visitExportDeclaration: function(tree) {
  27983. var declType = tree.declaration.type;
  27984. this.checkVisit_(declType === VARIABLE_STATEMENT || declType === FUNCTION_DECLARATION || declType === CLASS_DECLARATION || declType === NAMED_EXPORT || declType === EXPORT_DEFAULT || declType === TYPE_ALIAS_DECLARATION, tree.declaration, 'expected valid export tree');
  27985. },
  27986. visitNamedExport: function(tree) {
  27987. var specifierType = tree.exportClause.type;
  27988. this.checkVisit_(specifierType === EXPORT_SPECIFIER || specifierType === EXPORT_SPECIFIER_SET || specifierType === EXPORT_STAR || specifierType === FORWARD_DEFAULT_EXPORT || specifierType === NAME_SPACE_EXPORT, tree.exportClause, 'Invalid export clause');
  27989. if (tree.moduleSpecifier) {
  27990. this.checkVisit_(tree.moduleSpecifier.type === MODULE_SPECIFIER, tree.moduleSpecifier, 'module expression expected');
  27991. }
  27992. },
  27993. visitExportSpecifierSet: function(tree) {
  27994. this.check_(tree.specifiers.length > 0, tree, 'expected at least one identifier');
  27995. for (var i = 0; i < tree.specifiers.length; i++) {
  27996. var specifier = tree.specifiers[i];
  27997. this.checkVisit_(specifier.type === EXPORT_SPECIFIER || specifier.type === IDENTIFIER_EXPRESSION, specifier, 'expected valid export specifier');
  27998. }
  27999. },
  28000. visitExpressionStatement: function(tree) {
  28001. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28002. },
  28003. visitFinally: function(tree) {
  28004. this.checkVisit_(tree.block.type === BLOCK, tree.block, 'block expected');
  28005. },
  28006. visitForOfStatement: function(tree) {
  28007. this.checkVisit_(tree.initializer.isPattern() || tree.initializer.type === IDENTIFIER_EXPRESSION || tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarations.length === 1, tree.initializer, 'for-each statement may not have more than one variable declaration');
  28008. this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected');
  28009. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  28010. },
  28011. visitForInStatement: function(tree) {
  28012. if (tree.initializer.type === VARIABLE_DECLARATION_LIST) {
  28013. this.checkVisit_(tree.initializer.declarations.length <= 1, tree.initializer, 'for-in statement may not have more than one variable declaration');
  28014. } else {
  28015. this.checkVisit_(tree.initializer.isPattern() || tree.initializer.isExpression(), tree.initializer, 'variable declaration, expression or ' + 'pattern expected');
  28016. }
  28017. this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected');
  28018. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  28019. },
  28020. visitFormalParameterList: function(tree) {
  28021. for (var i = 0; i < tree.parameters.length; i++) {
  28022. var parameter = tree.parameters[i];
  28023. assert(parameter.type === FORMAL_PARAMETER);
  28024. parameter = parameter.parameter;
  28025. switch (parameter.type) {
  28026. case BINDING_ELEMENT:
  28027. break;
  28028. case REST_PARAMETER:
  28029. this.checkVisit_(i === tree.parameters.length - 1, parameter, 'rest parameters must be the last parameter in a parameter list');
  28030. this.checkType_(BINDING_IDENTIFIER, parameter.identifier, 'binding identifier expected');
  28031. break;
  28032. default:
  28033. this.fail_(parameter, 'parameters must be identifiers or rest' + (" parameters. Found: " + parameter.type));
  28034. break;
  28035. }
  28036. this.visitAny(parameter);
  28037. }
  28038. },
  28039. visitForStatement: function(tree) {
  28040. if (tree.initializer !== null) {
  28041. this.checkVisit_(tree.initializer.isExpression() || tree.initializer.type === VARIABLE_DECLARATION_LIST, tree.initializer, 'variable declaration list or expression expected');
  28042. }
  28043. if (tree.condition !== null) {
  28044. this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');
  28045. }
  28046. if (tree.increment !== null) {
  28047. this.checkVisit_(tree.increment.isExpression(), tree.increment, 'expression expected');
  28048. }
  28049. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  28050. },
  28051. visitFunctionBody: function(tree) {
  28052. for (var i = 0; i < tree.statements.length; i++) {
  28053. var statement = tree.statements[i];
  28054. this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected');
  28055. }
  28056. },
  28057. visitFunctionDeclaration: function(tree) {
  28058. this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected');
  28059. this.visitFunction_(tree);
  28060. },
  28061. visitFunctionExpression: function(tree) {
  28062. if (tree.name !== null) {
  28063. this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected');
  28064. }
  28065. this.visitFunction_(tree);
  28066. },
  28067. visitFunction_: function(tree) {
  28068. this.checkType_(FORMAL_PARAMETER_LIST, tree.parameterList, 'formal parameters expected');
  28069. this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');
  28070. },
  28071. visitGetAccessor: function(tree) {
  28072. this.checkPropertyName_(tree.name);
  28073. this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');
  28074. },
  28075. visitIfStatement: function(tree) {
  28076. this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');
  28077. this.checkVisit_(tree.ifClause.isStatement(), tree.ifClause, 'statement expected');
  28078. if (tree.elseClause !== null) {
  28079. this.checkVisit_(tree.elseClause.isStatement(), tree.elseClause, 'statement expected');
  28080. }
  28081. },
  28082. visitImportDeclaration: function(tree) {
  28083. if (tree.importClause !== null) {
  28084. this.check_(tree.importClause.type === NAME_SPACE_IMPORT || tree.importClause.type === IMPORTED_BINDING || tree.importClause.type === IMPORT_SPECIFIER_SET || tree.importClause.type === IMPORT_CLAUSE_PAIR || tree.importClause.type === IMPORT_TYPE_CLAUSE, tree.importClause, 'Invalid import clause');
  28085. }
  28086. this.checkType_(MODULE_SPECIFIER, tree.moduleSpecifier, 'module specifier expected');
  28087. },
  28088. visitImportSpecifier: function(tree) {
  28089. this.checkType_(IMPORTED_BINDING, tree.binding, 'ImportedBinding expected');
  28090. },
  28091. visitImportedBinding: function(tree) {
  28092. this.checkType_(BINDING_IDENTIFIER, tree.binding, 'binding identifier expected');
  28093. },
  28094. visitImportClausePair: function(tree) {
  28095. this.checkType_(IMPORTED_BINDING, tree.first, 'ImportedBinding expected');
  28096. this.check_(tree.second.type === NAME_SPACE_IMPORT || tree.second.type === IMPORT_SPECIFIER_SET, tree.second, 'Invalid import clause');
  28097. },
  28098. visitJsxElement: function(tree) {
  28099. this.checkType_(JSX_ELEMENT_NAME, tree.name, 'JSX Element Name expected');
  28100. for (var i = 0; i < tree.attributes.length; i++) {
  28101. var attr = tree.attributes[i];
  28102. this.checkVisit_(attr.type === JSX_ATTRIBUTE || attr.type === JSX_SPREAD_ATTRIBUTE, attr, 'JSX Attribute expected');
  28103. }
  28104. for (var i$__3 = 0; i$__3 < tree.children.length; i$__3++) {
  28105. var child = tree.children[i$__3];
  28106. this.checkVisit_(child.type === JSX_ELEMENT || child.type === JSX_PLACEHOLDER || child.type === JSX_TEXT, child, 'JSX child expected');
  28107. }
  28108. },
  28109. visitLabelledStatement: function(tree) {
  28110. this.checkVisit_(tree.statement.isStatement(), tree.statement, 'statement expected');
  28111. },
  28112. visitMemberExpression: function(tree) {
  28113. this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');
  28114. if (tree.operand instanceof NewExpression) {
  28115. this.check_(tree.operand.args !== null, tree.operand, 'new args expected');
  28116. }
  28117. this.visitAny(tree.operand);
  28118. },
  28119. visitMemberLookupExpression: function(tree) {
  28120. this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');
  28121. if (tree.operand instanceof NewExpression) {
  28122. this.check_(tree.operand.args !== null, tree.operand, 'new args expected');
  28123. }
  28124. this.visitAny(tree.operand);
  28125. },
  28126. visitSyntaxErrorTree: function(tree) {
  28127. this.fail_(tree, ("parse tree contains SyntaxError: " + tree.message));
  28128. },
  28129. visitModuleSpecifier: function(tree) {
  28130. this.check_(tree.token.type === STRING, tree, 'string or identifier expected');
  28131. },
  28132. visitNewExpression: function(tree) {
  28133. this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected');
  28134. this.visitAny(tree.args);
  28135. },
  28136. visitObjectLiteral: function(tree) {
  28137. for (var i = 0; i < tree.propertyNameAndValues.length; i++) {
  28138. var propertyNameAndValue = tree.propertyNameAndValues[i];
  28139. switch (propertyNameAndValue.type) {
  28140. case GET_ACCESSOR:
  28141. case SET_ACCESSOR:
  28142. case METHOD:
  28143. this.check_(!propertyNameAndValue.isStatic, propertyNameAndValue, 'static is not allowed in object literal expression');
  28144. break;
  28145. case PROPERTY_NAME_ASSIGNMENT:
  28146. case PROPERTY_NAME_SHORTHAND:
  28147. case SPREAD_EXPRESSION:
  28148. break;
  28149. default:
  28150. this.fail_(propertyNameAndValue, 'accessor, property name ' + 'assignment or property method assigment expected');
  28151. }
  28152. this.visitAny(propertyNameAndValue);
  28153. }
  28154. },
  28155. visitObjectPattern: function(tree) {
  28156. for (var i = 0; i < tree.fields.length; i++) {
  28157. var field = tree.fields[i];
  28158. this.checkVisit_(field.type === OBJECT_PATTERN_FIELD || field.type === ASSIGNMENT_ELEMENT || field.type === BINDING_ELEMENT, field, 'object pattern field expected');
  28159. }
  28160. },
  28161. visitObjectPatternField: function(tree) {
  28162. this.checkPropertyName_(tree.name);
  28163. this.checkVisit_(tree.element.type === ASSIGNMENT_ELEMENT || tree.element.type === BINDING_ELEMENT || tree.element.isPattern() || tree.element.isLeftHandSideExpression(), tree.element, 'binding element expected');
  28164. },
  28165. visitParenExpression: function(tree) {
  28166. if (tree.expression.isPattern()) {
  28167. this.visitAny(tree.expression);
  28168. } else {
  28169. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28170. }
  28171. },
  28172. visitPostfixExpression: function(tree) {
  28173. this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected');
  28174. },
  28175. visitPredefinedType: function(tree) {},
  28176. visitScript: function(tree) {
  28177. for (var i = 0; i < tree.scriptItemList.length; i++) {
  28178. var scriptItemList = tree.scriptItemList[i];
  28179. this.checkVisit_(scriptItemList.isScriptElement(), scriptItemList, 'global script item expected');
  28180. }
  28181. },
  28182. checkPropertyName_: function(tree) {
  28183. this.checkVisit_(tree.type === LITERAL_PROPERTY_NAME || tree.type === COMPUTED_PROPERTY_NAME, tree, 'property name expected');
  28184. },
  28185. visitPropertyNameAssignment: function(tree) {
  28186. this.checkPropertyName_(tree.name);
  28187. this.checkVisit_(tree.value.isAssignmentExpression(), tree.value, 'assignment expression expected');
  28188. },
  28189. visitPropertyNameShorthand: function(tree) {
  28190. this.check_(tree.name.type === IDENTIFIER || tree.name.type === YIELD || tree.name.isStrictKeyword(), tree, 'identifier token expected');
  28191. },
  28192. visitLiteralPropertyName: function(tree) {
  28193. var type = tree.literalToken.type;
  28194. this.check_(tree.literalToken.isKeyword() || type === IDENTIFIER || type === NUMBER || type === STRING, tree, 'Unexpected token in literal property name');
  28195. },
  28196. visitTemplateLiteralExpression: function(tree) {
  28197. if (tree.operand) {
  28198. this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member or call expression expected');
  28199. }
  28200. for (var i = 0; i < tree.elements.length; i++) {
  28201. var element = tree.elements[i];
  28202. if (i % 2) {
  28203. this.checkType_(TEMPLATE_SUBSTITUTION, element, 'Template literal substitution expected');
  28204. } else {
  28205. this.checkType_(TEMPLATE_LITERAL_PORTION, element, 'Template literal portion expected');
  28206. }
  28207. }
  28208. },
  28209. visitReturnStatement: function(tree) {
  28210. if (tree.expression !== null) {
  28211. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28212. }
  28213. },
  28214. visitSetAccessor: function(tree) {
  28215. this.checkPropertyName_(tree.name);
  28216. this.checkType_(FUNCTION_BODY, tree.body, 'function body expected');
  28217. },
  28218. visitSpreadExpression: function(tree) {
  28219. this.checkVisit_(tree.expression.isAssignmentExpression(), tree.expression, 'assignment expression expected');
  28220. },
  28221. visitStateMachine: function(tree) {
  28222. this.fail_(tree, 'State machines are never valid outside of the ' + 'GeneratorTransformer pass.');
  28223. },
  28224. visitSwitchStatement: function(tree) {
  28225. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28226. var defaultCount = 0;
  28227. for (var i = 0; i < tree.caseClauses.length; i++) {
  28228. var caseClause = tree.caseClauses[i];
  28229. if (caseClause.type === DEFAULT_CLAUSE) {
  28230. ++defaultCount;
  28231. this.checkVisit_(defaultCount <= 1, caseClause, 'no more than one default clause allowed');
  28232. } else {
  28233. this.checkType_(CASE_CLAUSE, caseClause, 'case or default clause expected');
  28234. }
  28235. }
  28236. },
  28237. visitThrowStatement: function(tree) {
  28238. if (tree.value === null) {
  28239. return;
  28240. }
  28241. this.checkVisit_(tree.value.isExpression(), tree.value, 'expression expected');
  28242. },
  28243. visitTryStatement: function(tree) {
  28244. this.checkType_(BLOCK, tree.body, 'block expected');
  28245. if (tree.catchBlock !== null) {
  28246. this.checkType_(CATCH, tree.catchBlock, 'catch block expected');
  28247. }
  28248. if (tree.finallyBlock !== null) {
  28249. this.checkType_(FINALLY, tree.finallyBlock, 'finally block expected');
  28250. }
  28251. if (tree.catchBlock === null && tree.finallyBlock === null) {
  28252. this.fail_(tree, 'either catch or finally must be present');
  28253. }
  28254. },
  28255. visitTypeArguments: function(tree) {
  28256. var args = tree.args;
  28257. for (var i = 0; i < args.length; i++) {
  28258. this.checkVisit_(args[i].isType(), args[i], 'Type arguments must be type expressions');
  28259. }
  28260. },
  28261. visitTypeName: function(tree) {
  28262. this.checkVisit_(tree.moduleName === null || tree.moduleName.type === TYPE_NAME, tree.moduleName, 'moduleName must be null or a TypeName');
  28263. this.check_(tree.name.type === IDENTIFIER, tree, 'name must be an identifier');
  28264. },
  28265. visitTypeReference: function(tree) {
  28266. this.checkType_(TYPE_NAME, tree.typeName, 'typeName must be a TypeName');
  28267. this.checkType_(TYPE_ARGUMENTS, tree.args, 'args must be a TypeArguments');
  28268. },
  28269. visitTypeParameters: function(tree) {
  28270. var parameters = tree.parameters;
  28271. for (var i = 0; i < parameters.length; i++) {
  28272. this.checkType_(TYPE_PARAMETER, parameters[i], 'Type parameters must all be type parameters');
  28273. }
  28274. },
  28275. visitTypeParameter: function(tree) {
  28276. this.check_(tree.identifierToken.type === IDENTIFIER, tree, 'Type parameter must be an identifier token');
  28277. if (tree.extendsType) {
  28278. this.checkVisit_(tree.extendsType.isType(), tree.extendsType, 'extends type must be a type expression');
  28279. }
  28280. },
  28281. visitUnaryExpression: function(tree) {
  28282. this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected');
  28283. },
  28284. visitVariableDeclaration: function(tree) {
  28285. this.checkVisit_(tree.lvalue.isPattern() || tree.lvalue.type === BINDING_IDENTIFIER, tree.lvalue, 'binding identifier expected, found: ' + tree.lvalue.type);
  28286. if (tree.initializer !== null) {
  28287. this.checkVisit_(tree.initializer.isAssignmentExpression(), tree.initializer, 'assignment expression expected');
  28288. }
  28289. },
  28290. visitWhileStatement: function(tree) {
  28291. this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected');
  28292. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  28293. },
  28294. visitWithStatement: function(tree) {
  28295. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28296. this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected');
  28297. },
  28298. visitYieldExpression: function(tree) {
  28299. if (tree.expression !== null) {
  28300. this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected');
  28301. }
  28302. }
  28303. }, {}, $__super);
  28304. }(ParseTreeVisitor);
  28305. ParseTreeValidator.validate = function(tree) {
  28306. var validator = new ParseTreeValidator();
  28307. try {
  28308. validator.visitAny(tree);
  28309. } catch (e) {
  28310. if (!(e instanceof ValidationError)) {
  28311. throw e;
  28312. }
  28313. var location = null;
  28314. if (e.tree !== null) {
  28315. location = e.tree.location;
  28316. }
  28317. if (location === null) {
  28318. location = tree.location;
  28319. }
  28320. var locationString = location !== null ? location.start.toString() : '(unknown)';
  28321. throw new Error(("Parse tree validation failure '" + e.message + "' at " + locationString + ":") + ("\n\n" + TreeWriter.write(tree) + "\n"));
  28322. }
  28323. };
  28324. return {get ParseTreeValidator() {
  28325. return ParseTreeValidator;
  28326. }};
  28327. });
  28328. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MultiTransformer.js", [], function() {
  28329. "use strict";
  28330. var __moduleName = "traceur@0.0.112/src/codegeneration/MultiTransformer.js";
  28331. var ParseTreeValidator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeValidator.js", "traceur@0.0.112/src/codegeneration/MultiTransformer.js")).ParseTreeValidator;
  28332. var MultiTransformer = function() {
  28333. function MultiTransformer(reporter, validate) {
  28334. this.reporter_ = reporter;
  28335. this.validate_ = validate;
  28336. this.treeTransformers_ = [];
  28337. }
  28338. return ($traceurRuntime.createClass)(MultiTransformer, {
  28339. append: function(treeTransformer) {
  28340. this.treeTransformers_.push(treeTransformer);
  28341. },
  28342. transform: function(tree) {
  28343. var reporter = this.reporter_;
  28344. var validate = this.validate_;
  28345. this.treeTransformers_.every(function(transformTree) {
  28346. tree = transformTree(tree);
  28347. if (reporter.hadError())
  28348. return false;
  28349. if (validate)
  28350. ParseTreeValidator.validate(tree);
  28351. return true;
  28352. });
  28353. return tree;
  28354. }
  28355. }, {});
  28356. }();
  28357. return {get MultiTransformer() {
  28358. return MultiTransformer;
  28359. }};
  28360. });
  28361. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js", [], function() {
  28362. "use strict";
  28363. var __moduleName = "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js";
  28364. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).ParseTreeTransformer;
  28365. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")),
  28366. LiteralExpression = $__2.LiteralExpression,
  28367. LiteralPropertyName = $__2.LiteralPropertyName;
  28368. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).LiteralToken;
  28369. var NUMBER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).NUMBER;
  28370. function needsTransform(token) {
  28371. return token.type === NUMBER && /^0[bBoO]/.test(token.value);
  28372. }
  28373. function transformToken(token) {
  28374. return new LiteralToken(NUMBER, String(token.processedValue), token.location);
  28375. }
  28376. var NumericLiteralTransformer = function($__super) {
  28377. function NumericLiteralTransformer() {
  28378. $traceurRuntime.superConstructor(NumericLiteralTransformer).apply(this, arguments);
  28379. }
  28380. return ($traceurRuntime.createClass)(NumericLiteralTransformer, {
  28381. transformLiteralExpression: function(tree) {
  28382. var token = tree.literalToken;
  28383. if (needsTransform(token))
  28384. return new LiteralExpression(tree.location, transformToken(token));
  28385. return tree;
  28386. },
  28387. transformLiteralPropertyName: function(tree) {
  28388. var token = tree.literalToken;
  28389. if (needsTransform(token))
  28390. return new LiteralPropertyName(tree.location, transformToken(token));
  28391. return tree;
  28392. }
  28393. }, {}, $__super);
  28394. }(ParseTreeTransformer);
  28395. return {get NumericLiteralTransformer() {
  28396. return NumericLiteralTransformer;
  28397. }};
  28398. });
  28399. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js", [], function() {
  28400. "use strict";
  28401. var __moduleName = "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js";
  28402. var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).FindVisitor;
  28403. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")),
  28404. FunctionExpression = $__4.FunctionExpression,
  28405. IdentifierExpression = $__4.IdentifierExpression,
  28406. LiteralExpression = $__4.LiteralExpression;
  28407. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).TempVarTransformer;
  28408. var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).IDENTIFIER;
  28409. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")),
  28410. COMPUTED_PROPERTY_NAME = $__7.COMPUTED_PROPERTY_NAME,
  28411. LITERAL_PROPERTY_NAME = $__7.LITERAL_PROPERTY_NAME;
  28412. var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringMap.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).StringMap;
  28413. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")),
  28414. createAssignmentExpression = $__9.createAssignmentExpression,
  28415. createCommaExpression = $__9.createCommaExpression,
  28416. createDefineProperty = $__9.createDefineProperty,
  28417. createEmptyParameterList = $__9.createEmptyParameterList,
  28418. createFunctionExpression = $__9.createFunctionExpression,
  28419. createIdentifierExpression = $__9.createIdentifierExpression,
  28420. createObjectCreate = $__9.createObjectCreate,
  28421. createObjectLiteral = $__9.createObjectLiteral,
  28422. createParenExpression = $__9.createParenExpression,
  28423. createPropertyNameAssignment = $__9.createPropertyNameAssignment,
  28424. createStringLiteral = $__9.createStringLiteral;
  28425. var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).propName;
  28426. var FindAdvancedProperty = function($__super) {
  28427. function FindAdvancedProperty(transformOptions) {
  28428. $traceurRuntime.superConstructor(FindAdvancedProperty).call(this, true);
  28429. this.transformOptions_ = transformOptions;
  28430. this.protoExpression = null;
  28431. }
  28432. return ($traceurRuntime.createClass)(FindAdvancedProperty, {
  28433. visitPropertyNameAssignment: function(tree) {
  28434. if (isProtoName(tree.name))
  28435. this.protoExpression = tree.value;
  28436. else
  28437. this.visitAny(tree.name);
  28438. },
  28439. visitMethod: function(tree) {
  28440. this.visitAny(tree.name);
  28441. },
  28442. visitGetAccessor: function(tree) {
  28443. if (this.transformOptions_.properTailCalls) {
  28444. this.found = true;
  28445. } else {
  28446. this.visitAny(tree.name);
  28447. }
  28448. },
  28449. visitSetAccessor: function(tree) {
  28450. if (this.transformOptions_.properTailCalls) {
  28451. this.found = true;
  28452. } else {
  28453. this.visitAny(tree.name);
  28454. }
  28455. },
  28456. visitComputedPropertyName: function(tree) {
  28457. if (this.transformOptions_.computedPropertyNames)
  28458. this.found = true;
  28459. }
  28460. }, {}, $__super);
  28461. }(FindVisitor);
  28462. function isProtoName(tree) {
  28463. return propName(tree) === '__proto__';
  28464. }
  28465. var ObjectLiteralTransformer = function($__super) {
  28466. function ObjectLiteralTransformer(identifierGenerator, reporter, options) {
  28467. $traceurRuntime.superConstructor(ObjectLiteralTransformer).call(this, identifierGenerator, reporter, options);
  28468. this.transformOptions_ = options.transformOptions;
  28469. this.protoExpression = null;
  28470. this.needsAdvancedTransform = false;
  28471. this.seenAccessors = null;
  28472. }
  28473. return ($traceurRuntime.createClass)(ObjectLiteralTransformer, {
  28474. findSeenAccessor_: function(name) {
  28475. if (name.type === COMPUTED_PROPERTY_NAME)
  28476. return null;
  28477. var s = propName(name);
  28478. return this.seenAccessors.get(s);
  28479. },
  28480. removeSeenAccessor_: function(name) {
  28481. if (name.type === COMPUTED_PROPERTY_NAME)
  28482. return;
  28483. var s = propName(name);
  28484. this.seenAccessors.delete(s);
  28485. },
  28486. addSeenAccessor_: function(name, descr) {
  28487. if (name.type === COMPUTED_PROPERTY_NAME)
  28488. return;
  28489. var s = propName(name);
  28490. this.seenAccessors.set(s, descr);
  28491. },
  28492. createProperty_: function(name, descr) {
  28493. var expression;
  28494. if (name.type === LITERAL_PROPERTY_NAME) {
  28495. if (this.needsAdvancedTransform)
  28496. expression = this.getPropertyName_(name);
  28497. else
  28498. expression = name;
  28499. } else {
  28500. expression = name.expression;
  28501. }
  28502. if (descr.get || descr.set) {
  28503. var oldAccessor = this.findSeenAccessor_(name);
  28504. if (oldAccessor) {
  28505. oldAccessor.get = descr.get || oldAccessor.get;
  28506. oldAccessor.set = descr.set || oldAccessor.set;
  28507. this.removeSeenAccessor_(name);
  28508. return null;
  28509. } else {
  28510. this.addSeenAccessor_(name, descr);
  28511. }
  28512. }
  28513. return [expression, descr];
  28514. },
  28515. getPropertyName_: function(nameTree) {
  28516. var token = nameTree.literalToken;
  28517. switch (token.type) {
  28518. case IDENTIFIER:
  28519. return createStringLiteral(token.value);
  28520. default:
  28521. if (token.isKeyword())
  28522. return createStringLiteral(token.type);
  28523. return new LiteralExpression(token.location, token);
  28524. }
  28525. },
  28526. transformClassDeclaration: function(tree) {
  28527. return tree;
  28528. },
  28529. transformClassExpression: function(tree) {
  28530. return tree;
  28531. },
  28532. transformObjectLiteral: function(tree) {
  28533. var oldNeedsTransform = this.needsAdvancedTransform;
  28534. var oldSeenAccessors = this.seenAccessors;
  28535. var transformed = this.transformObjectLiteralInner_(tree);
  28536. this.needsAdvancedTransform = oldNeedsTransform;
  28537. this.seenAccessors = oldSeenAccessors;
  28538. return transformed;
  28539. },
  28540. transformObjectLiteralInner_: function(tree) {
  28541. var finder = new FindAdvancedProperty(this.transformOptions_);
  28542. finder.visitAny(tree);
  28543. if (!finder.found) {
  28544. this.needsAdvancedTransform = false;
  28545. return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformObjectLiteral").call(this, tree);
  28546. }
  28547. this.needsAdvancedTransform = true;
  28548. this.seenAccessors = new StringMap();
  28549. var properties = this.transformList(tree.propertyNameAndValues);
  28550. properties = properties.filter(function(tree) {
  28551. return tree;
  28552. });
  28553. var tempVar = this.addTempVar();
  28554. var tempVarIdentifierExpression = createIdentifierExpression(tempVar);
  28555. var expressions = properties.map(function(property) {
  28556. var expression = property[0];
  28557. var descr = property[1];
  28558. return createDefineProperty(tempVarIdentifierExpression, expression, descr);
  28559. });
  28560. var protoExpression = this.transformAny(finder.protoExpression);
  28561. var objectExpression;
  28562. if (protoExpression)
  28563. objectExpression = createObjectCreate(protoExpression);
  28564. else
  28565. objectExpression = createObjectLiteral([]);
  28566. expressions.unshift(createAssignmentExpression(tempVarIdentifierExpression, objectExpression));
  28567. expressions.push(tempVarIdentifierExpression);
  28568. return createParenExpression(createCommaExpression(expressions));
  28569. },
  28570. transformPropertyNameAssignment: function(tree) {
  28571. if (!this.needsAdvancedTransform)
  28572. return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformPropertyNameAssignment").call(this, tree);
  28573. if (isProtoName(tree.name))
  28574. return null;
  28575. return this.createProperty_(tree.name, {
  28576. value: this.transformAny(tree.value),
  28577. configurable: true,
  28578. enumerable: true,
  28579. writable: true
  28580. });
  28581. },
  28582. transformGetAccessor: function(tree) {
  28583. if (!this.needsAdvancedTransform)
  28584. return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformGetAccessor").call(this, tree);
  28585. var body = this.transformAny(tree.body);
  28586. var func = createFunctionExpression(createEmptyParameterList(), body);
  28587. return this.createProperty_(tree.name, {
  28588. get: func,
  28589. configurable: true,
  28590. enumerable: true
  28591. });
  28592. },
  28593. transformSetAccessor: function(tree) {
  28594. if (!this.needsAdvancedTransform)
  28595. return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformSetAccessor").call(this, tree);
  28596. var body = this.transformAny(tree.body);
  28597. var parameterList = this.transformAny(tree.parameterList);
  28598. var func = createFunctionExpression(parameterList, body);
  28599. return this.createProperty_(tree.name, {
  28600. set: func,
  28601. configurable: true,
  28602. enumerable: true
  28603. });
  28604. },
  28605. transformMethod: function(tree) {
  28606. var func = new FunctionExpression(tree.location, tree.debugName, tree.functionKind, this.transformAny(tree.parameterList), tree.typeAnnotation, [], this.transformAny(tree.body));
  28607. if (!this.needsAdvancedTransform) {
  28608. return createPropertyNameAssignment(tree.name, func);
  28609. }
  28610. var expression = this.transformAny(tree.name);
  28611. return this.createProperty_(tree.name, {
  28612. value: func,
  28613. configurable: true,
  28614. enumerable: true,
  28615. writable: true
  28616. });
  28617. },
  28618. transformPropertyNameShorthand: function(tree) {
  28619. if (!this.needsAdvancedTransform)
  28620. return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformPropertyNameShorthand").call(this, tree);
  28621. var expression = this.transformAny(tree.name);
  28622. return this.createProperty_(tree.name, {
  28623. value: new IdentifierExpression(tree.location, tree.name.identifierToken),
  28624. configurable: true,
  28625. enumerable: false,
  28626. writable: true
  28627. });
  28628. }
  28629. }, {}, $__super);
  28630. }(TempVarTransformer);
  28631. return {get ObjectLiteralTransformer() {
  28632. return ObjectLiteralTransformer;
  28633. }};
  28634. });
  28635. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js", [], function() {
  28636. "use strict";
  28637. var __moduleName = "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js";
  28638. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")).ParseTreeTransformer;
  28639. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")),
  28640. ArgumentList = $__2.ArgumentList,
  28641. BinaryExpression = $__2.BinaryExpression,
  28642. CallExpression = $__2.CallExpression,
  28643. ConditionalExpression = $__2.ConditionalExpression,
  28644. MemberExpression = $__2.MemberExpression,
  28645. MemberLookupExpression = $__2.MemberLookupExpression;
  28646. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")),
  28647. createArrayLiteral = $__3.createArrayLiteral,
  28648. createAssignmentExpression = $__3.createAssignmentExpression,
  28649. createCommaExpression = $__3.createCommaExpression,
  28650. createMemberExpression = $__3.createMemberExpression,
  28651. id = $__3.createIdentifierExpression,
  28652. createNullLiteral = $__3.createNullLiteral,
  28653. createParenExpression = $__3.createParenExpression;
  28654. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")),
  28655. COMMA_EXPRESSION = $__4.COMMA_EXPRESSION,
  28656. MEMBER_EXPRESSION = $__4.MEMBER_EXPRESSION,
  28657. MEMBER_LOOKUP_EXPRESSION = $__4.MEMBER_LOOKUP_EXPRESSION,
  28658. IDENTIFIER_EXPRESSION = $__4.IDENTIFIER_EXPRESSION,
  28659. PAREN_EXPRESSION = $__4.PAREN_EXPRESSION,
  28660. THIS_EXPRESSION = $__4.THIS_EXPRESSION;
  28661. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")),
  28662. AND = $__5.AND,
  28663. OR = $__5.OR;
  28664. function createCall(tree, operand, thisArg, importRuntimeTransformer) {
  28665. var argList = tree.args;
  28666. var argArray = argList ? argList.args : [];
  28667. argArray = argArray.map(function(arg) {
  28668. if (arg.type === COMMA_EXPRESSION) {
  28669. return createParenExpression(arg.type);
  28670. }
  28671. return arg;
  28672. });
  28673. var continuation = importRuntimeTransformer.getRuntimeExpression('continuation');
  28674. return new CallExpression(tree.location, continuation, new ArgumentList(argList ? argList.location : null, [operand, thisArg, createArrayLiteral(argArray)]));
  28675. }
  28676. var RewriteTailExpressionsTransformer = function($__super) {
  28677. function RewriteTailExpressionsTransformer(bodyTransformer) {
  28678. $traceurRuntime.superConstructor(RewriteTailExpressionsTransformer).call(this);
  28679. this.bodyTransformer_ = bodyTransformer;
  28680. }
  28681. return ($traceurRuntime.createClass)(RewriteTailExpressionsTransformer, {
  28682. transformBinaryExpression: function(tree) {
  28683. var operator = tree.operator;
  28684. if (operator.type !== AND && operator.type !== OR) {
  28685. return tree;
  28686. }
  28687. var right = this.transformAny(tree.right);
  28688. if (right !== tree.right) {
  28689. return new BinaryExpression(tree.location, tree.left, operator, right);
  28690. }
  28691. return tree;
  28692. },
  28693. transformCallExpression: function(tree) {
  28694. var operand = tree.operand;
  28695. while (operand.type === PAREN_EXPRESSION) {
  28696. operand = operand.expression;
  28697. }
  28698. switch (operand.type) {
  28699. case IDENTIFIER_EXPRESSION:
  28700. return createCall(tree, operand, createNullLiteral(), this.bodyTransformer_);
  28701. case MEMBER_EXPRESSION:
  28702. case MEMBER_LOOKUP_EXPRESSION:
  28703. return this.transformMemberExpressionCall_(tree, operand);
  28704. }
  28705. return tree;
  28706. },
  28707. transformMemberExpressionCall_: function(tree, operand) {
  28708. var object = operand.operand;
  28709. var thisArg;
  28710. var assignment;
  28711. if (object.type === IDENTIFIER_EXPRESSION || object.type === THIS_EXPRESSION) {
  28712. thisArg = object;
  28713. } else {
  28714. thisArg = id(this.bodyTransformer_.addTempVar());
  28715. assignment = createAssignmentExpression(thisArg, operand.operand);
  28716. }
  28717. if (operand.type === MEMBER_EXPRESSION) {
  28718. operand = new MemberExpression(operand.location, thisArg, operand.memberName);
  28719. } else {
  28720. operand = new MemberLookupExpression(operand.location, thisArg, operand.memberExpression);
  28721. }
  28722. if (assignment) {
  28723. return createParenExpression(createCommaExpression([assignment, createCall(tree, operand, thisArg, this.bodyTransformer_)]));
  28724. } else {
  28725. return createCall(tree, operand, thisArg, this.bodyTransformer_);
  28726. }
  28727. },
  28728. transformCommaExpression: function(tree) {
  28729. var expressions = tree.expressions;
  28730. var expression = expressions[expressions.length - 1];
  28731. var transformedExpression = this.transformAny(expression);
  28732. if (expression !== transformedExpression) {
  28733. expressions = expressions.slice(0, -1);
  28734. expressions.push(transformedExpression);
  28735. return new CommaExpression(tree.location, expressions);
  28736. }
  28737. return tree;
  28738. },
  28739. transformConditionalExpression: function(tree) {
  28740. var left = this.transformAny(tree.left);
  28741. var right = this.transformAny(tree.right);
  28742. if (left !== tree.left || right !== tree.right) {
  28743. return new ConditionalExpression(tree.location, tree.condition, left, right);
  28744. }
  28745. return tree;
  28746. },
  28747. transformNewExpression: function(tree) {
  28748. var construct = this.bodyTransformer_.getRuntimeExpression('construct');
  28749. return createCall(tree, construct, tree.operand, this.bodyTransformer_);
  28750. },
  28751. transformArrayLiteral: function(tree) {
  28752. return tree;
  28753. },
  28754. transformArrowFunction: function(tree) {
  28755. return tree;
  28756. },
  28757. transformFunctionExpression: function(tree) {
  28758. return tree;
  28759. },
  28760. transformIdentifierExpression: function(tree) {
  28761. return tree;
  28762. },
  28763. transformLiteralExpression: function(tree) {
  28764. return tree;
  28765. },
  28766. transformMemberExpression: function(tree) {
  28767. return tree;
  28768. },
  28769. transformMemberLookupExpression: function(tree) {
  28770. return tree;
  28771. },
  28772. transformPostfixExpression: function(tree) {
  28773. return tree;
  28774. },
  28775. transformObjectLiteral: function(tree) {
  28776. return tree;
  28777. },
  28778. transformUnaryExpression: function(tree) {
  28779. return tree;
  28780. }
  28781. }, {transform: function(bodyTransformer, tree) {
  28782. return new RewriteTailExpressionsTransformer(bodyTransformer).transformAny(tree);
  28783. }}, $__super);
  28784. }(ParseTreeTransformer);
  28785. return {get RewriteTailExpressionsTransformer() {
  28786. return RewriteTailExpressionsTransformer;
  28787. }};
  28788. });
  28789. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js", [], function() {
  28790. "use strict";
  28791. var __moduleName = "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js";
  28792. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).ParseTreeTransformer;
  28793. var RewriteTailExpressionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RewriteTailExpressionsTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).RewriteTailExpressionsTransformer;
  28794. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")),
  28795. ReturnStatement = $__3.ReturnStatement,
  28796. TryStatement = $__3.TryStatement;
  28797. var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).default;
  28798. var RewriteTailCallsTransformer = function($__super) {
  28799. function RewriteTailCallsTransformer(bodyTransformer) {
  28800. $traceurRuntime.superConstructor(RewriteTailCallsTransformer).call(this);
  28801. this.bodyTransformer_ = bodyTransformer;
  28802. }
  28803. return ($traceurRuntime.createClass)(RewriteTailCallsTransformer, {
  28804. transformReturnStatement: function(tree) {
  28805. var expression = tree.expression;
  28806. if (expression !== null) {
  28807. expression = RewriteTailExpressionsTransformer.transform(this.bodyTransformer_, expression);
  28808. if (expression !== tree.expression) {
  28809. return new ReturnStatement(tree.location, expression);
  28810. }
  28811. }
  28812. return tree;
  28813. },
  28814. transformTryStatement: function(tree) {
  28815. var block;
  28816. if (tree.finallyBlock !== null) {
  28817. block = this.transformAny(tree.finallyBlock);
  28818. if (block !== tree.finallyBlock) {
  28819. return new TryStatement(tree.location, tree.body, tree.catchBlock, block);
  28820. }
  28821. } else {
  28822. block = this.transformAny(tree.catchBlock);
  28823. if (block !== tree.catchBlock) {
  28824. return new TryStatement(tree.location, tree.body, block, tree.finallyBlock);
  28825. }
  28826. }
  28827. return tree;
  28828. },
  28829. transformForInStatement: function(tree) {
  28830. return tree;
  28831. },
  28832. transformForOfStatement: function(tree) {
  28833. return tree;
  28834. },
  28835. transformForOnStatement: function(tree) {
  28836. return tree;
  28837. },
  28838. transformClassDeclaration: function(tree) {
  28839. return tree;
  28840. },
  28841. transformClassExpression: function(tree) {
  28842. return tree;
  28843. },
  28844. transformExpressionStatement: function(tree) {
  28845. return tree;
  28846. },
  28847. transformComprehensionFor: function(tree) {
  28848. return tree;
  28849. },
  28850. transformVariableStatement: function(tree) {
  28851. return tree;
  28852. }
  28853. }, {transform: function(bodyTransformer, tree) {
  28854. return new RewriteTailCallsTransformer(bodyTransformer).transformAny(tree);
  28855. }}, $__super);
  28856. }(SkipFunctionsTransformerTrait(ParseTreeTransformer));
  28857. return {get RewriteTailCallsTransformer() {
  28858. return RewriteTailCallsTransformer;
  28859. }};
  28860. });
  28861. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js", [], function() {
  28862. "use strict";
  28863. var __moduleName = "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js";
  28864. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).TempVarTransformer;
  28865. var RewriteTailCallsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RewriteTailCallsTransformer.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).RewriteTailCallsTransformer;
  28866. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")),
  28867. createFunctionBody = $__3.createFunctionBody,
  28868. createFunctionExpression = $__3.createFunctionExpression,
  28869. id = $__3.createIdentifierExpression;
  28870. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")),
  28871. parseExpression = $__4.parseExpression,
  28872. parseStatement = $__4.parseStatement,
  28873. parseStatements = $__4.parseStatements;
  28874. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")),
  28875. AnonBlock = $__5.AnonBlock,
  28876. FunctionDeclaration = $__5.FunctionDeclaration,
  28877. FunctionExpression = $__5.FunctionExpression;
  28878. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).default;
  28879. var ProperTailCallTransformer = function($__super) {
  28880. function ProperTailCallTransformer(identifierGenerator, reporter, options) {
  28881. $traceurRuntime.superConstructor(ProperTailCallTransformer).call(this, identifierGenerator, reporter, options);
  28882. this.inBlock_ = false;
  28883. this.options = options;
  28884. }
  28885. return ($traceurRuntime.createClass)(ProperTailCallTransformer, {
  28886. transformFunctionDeclaration: function(tree) {
  28887. tree = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  28888. if (tree.functionKind !== null) {
  28889. return tree;
  28890. }
  28891. var nameIdExpression = id(tree.name.identifierToken);
  28892. var initTailRecursiveFunction = this.getRuntimeExpression('initTailRecursiveFunction');
  28893. var setupFlagExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initTailRecursiveFunction, nameIdExpression);
  28894. var funcDecl = this.transformFunction_(tree, FunctionDeclaration);
  28895. if (funcDecl === tree) {
  28896. return tree;
  28897. }
  28898. var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupFlagExpression));
  28899. if (!this.inBlock_) {
  28900. return funcDecl;
  28901. }
  28902. return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ";"]), tmpVar, setupFlagExpression)]);
  28903. },
  28904. transformFunctionExpression: function(tree) {
  28905. tree = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformFunctionExpression").call(this, tree);
  28906. if (tree.functionKind) {
  28907. return tree;
  28908. }
  28909. var functionExpression = this.transformFunction_(tree, FunctionExpression);
  28910. if (functionExpression === tree) {
  28911. return tree;
  28912. }
  28913. var initTailRecursiveFunction = this.getRuntimeExpression('initTailRecursiveFunction');
  28914. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initTailRecursiveFunction, functionExpression);
  28915. },
  28916. transformFunction_: function(tree, constructor) {
  28917. var body = RewriteTailCallsTransformer.transform(this, tree.body);
  28918. if (body === tree.body) {
  28919. return tree;
  28920. }
  28921. var func = id(this.getTempIdentifier());
  28922. var innerFunction = createFunctionExpression(tree.parameterList, body);
  28923. var call = this.getRuntimeExpression('call');
  28924. var outerBody = createFunctionBody(parseStatements($traceurRuntime.getTemplateObject(["\n return ", "(", ", this, arguments);"]), call, innerFunction));
  28925. return new constructor(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, outerBody);
  28926. },
  28927. transformBlock: function(tree) {
  28928. var inBlock = this.inBlock_;
  28929. this.inBlock_ = true;
  28930. var rv = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformBlock").call(this, tree);
  28931. this.inBlock_ = inBlock;
  28932. return rv;
  28933. }
  28934. }, {}, $__super);
  28935. }(ImportRuntimeTrait(TempVarTransformer));
  28936. return {get ProperTailCallTransformer() {
  28937. return ProperTailCallTransformer;
  28938. }};
  28939. });
  28940. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js", [], function() {
  28941. "use strict";
  28942. var __moduleName = "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js";
  28943. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js")),
  28944. IdentifierExpression = $__1.IdentifierExpression,
  28945. LiteralPropertyName = $__1.LiteralPropertyName,
  28946. PropertyNameAssignment = $__1.PropertyNameAssignment;
  28947. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js")).ParseTreeTransformer;
  28948. var PropertyNameShorthandTransformer = function($__super) {
  28949. function PropertyNameShorthandTransformer() {
  28950. $traceurRuntime.superConstructor(PropertyNameShorthandTransformer).apply(this, arguments);
  28951. }
  28952. return ($traceurRuntime.createClass)(PropertyNameShorthandTransformer, {transformPropertyNameShorthand: function(tree) {
  28953. return new PropertyNameAssignment(tree.location, new LiteralPropertyName(tree.location, tree.name), new IdentifierExpression(tree.location, tree.name));
  28954. }}, {}, $__super);
  28955. }(ParseTreeTransformer);
  28956. return {get PropertyNameShorthandTransformer() {
  28957. return PropertyNameShorthandTransformer;
  28958. }};
  28959. });
  28960. $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/regexpuRewritePattern.js", [], function() {
  28961. "use strict";
  28962. var __moduleName = "traceur@0.0.112/src/outputgeneration/regexpuRewritePattern.js";
  28963. var modules = {};
  28964. var module = {};
  28965. var exports = module.exports = {};
  28966. var require = function(id) {
  28967. return modules[id];
  28968. };
  28969. ;
  28970. (function(root) {
  28971. var freeExports = typeof exports == 'object' && exports;
  28972. var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;
  28973. var freeGlobal = typeof global == 'object' && global;
  28974. if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
  28975. root = freeGlobal;
  28976. }
  28977. var ERRORS = {
  28978. 'rangeOrder': 'A range\u2019s `stop` value must be greater than or equal ' + 'to the `start` value.',
  28979. 'codePointRange': 'Invalid code point value. Code points range from ' + 'U+000000 to U+10FFFF.'
  28980. };
  28981. var HIGH_SURROGATE_MIN = 0xD800;
  28982. var HIGH_SURROGATE_MAX = 0xDBFF;
  28983. var LOW_SURROGATE_MIN = 0xDC00;
  28984. var LOW_SURROGATE_MAX = 0xDFFF;
  28985. var regexNull = /\\x00([^0123456789]|$)/g;
  28986. var object = {};
  28987. var hasOwnProperty = object.hasOwnProperty;
  28988. var extend = function(destination, source) {
  28989. var key;
  28990. for (key in source) {
  28991. if (hasOwnProperty.call(source, key)) {
  28992. destination[key] = source[key];
  28993. }
  28994. }
  28995. return destination;
  28996. };
  28997. var forEach = function(array, callback) {
  28998. var index = -1;
  28999. var length = array.length;
  29000. while (++index < length) {
  29001. callback(array[index], index);
  29002. }
  29003. };
  29004. var toString = object.toString;
  29005. var isArray = function(value) {
  29006. return toString.call(value) == '[object Array]';
  29007. };
  29008. var isNumber = function(value) {
  29009. return typeof value == 'number' || toString.call(value) == '[object Number]';
  29010. };
  29011. var zeroes = '0000';
  29012. var pad = function(number, totalCharacters) {
  29013. var string = String(number);
  29014. return string.length < totalCharacters ? (zeroes + string).slice(-totalCharacters) : string;
  29015. };
  29016. var hex = function(number) {
  29017. return Number(number).toString(16).toUpperCase();
  29018. };
  29019. var slice = [].slice;
  29020. var dataFromCodePoints = function(codePoints) {
  29021. var index = -1;
  29022. var length = codePoints.length;
  29023. var max = length - 1;
  29024. var result = [];
  29025. var isStart = true;
  29026. var tmp;
  29027. var previous = 0;
  29028. while (++index < length) {
  29029. tmp = codePoints[index];
  29030. if (isStart) {
  29031. result.push(tmp);
  29032. previous = tmp;
  29033. isStart = false;
  29034. } else {
  29035. if (tmp == previous + 1) {
  29036. if (index != max) {
  29037. previous = tmp;
  29038. continue;
  29039. } else {
  29040. isStart = true;
  29041. result.push(tmp + 1);
  29042. }
  29043. } else {
  29044. result.push(previous + 1, tmp);
  29045. previous = tmp;
  29046. }
  29047. }
  29048. }
  29049. if (!isStart) {
  29050. result.push(tmp + 1);
  29051. }
  29052. return result;
  29053. };
  29054. var dataRemove = function(data, codePoint) {
  29055. var index = 0;
  29056. var start;
  29057. var end;
  29058. var length = data.length;
  29059. while (index < length) {
  29060. start = data[index];
  29061. end = data[index + 1];
  29062. if (codePoint >= start && codePoint < end) {
  29063. if (codePoint == start) {
  29064. if (end == start + 1) {
  29065. data.splice(index, 2);
  29066. return data;
  29067. } else {
  29068. data[index] = codePoint + 1;
  29069. return data;
  29070. }
  29071. } else if (codePoint == end - 1) {
  29072. data[index + 1] = codePoint;
  29073. return data;
  29074. } else {
  29075. data.splice(index, 2, start, codePoint, codePoint + 1, end);
  29076. return data;
  29077. }
  29078. }
  29079. index += 2;
  29080. }
  29081. return data;
  29082. };
  29083. var dataRemoveRange = function(data, rangeStart, rangeEnd) {
  29084. if (rangeEnd < rangeStart) {
  29085. throw Error(ERRORS.rangeOrder);
  29086. }
  29087. var index = 0;
  29088. var start;
  29089. var end;
  29090. while (index < data.length) {
  29091. start = data[index];
  29092. end = data[index + 1] - 1;
  29093. if (start > rangeEnd) {
  29094. return data;
  29095. }
  29096. if (rangeStart <= start && rangeEnd >= end) {
  29097. data.splice(index, 2);
  29098. continue;
  29099. }
  29100. if (rangeStart >= start && rangeEnd < end) {
  29101. if (rangeStart == start) {
  29102. data[index] = rangeEnd + 1;
  29103. data[index + 1] = end + 1;
  29104. return data;
  29105. }
  29106. data.splice(index, 2, start, rangeStart, rangeEnd + 1, end + 1);
  29107. return data;
  29108. }
  29109. if (rangeStart >= start && rangeStart <= end) {
  29110. data[index + 1] = rangeStart;
  29111. } else if (rangeEnd >= start && rangeEnd <= end) {
  29112. data[index] = rangeEnd + 1;
  29113. return data;
  29114. }
  29115. index += 2;
  29116. }
  29117. return data;
  29118. };
  29119. var dataAdd = function(data, codePoint) {
  29120. var index = 0;
  29121. var start;
  29122. var end;
  29123. var lastIndex = null;
  29124. var length = data.length;
  29125. if (codePoint < 0x0 || codePoint > 0x10FFFF) {
  29126. throw RangeError(ERRORS.codePointRange);
  29127. }
  29128. while (index < length) {
  29129. start = data[index];
  29130. end = data[index + 1];
  29131. if (codePoint >= start && codePoint < end) {
  29132. return data;
  29133. }
  29134. if (codePoint == start - 1) {
  29135. data[index] = codePoint;
  29136. return data;
  29137. }
  29138. if (start > codePoint) {
  29139. data.splice(lastIndex != null ? lastIndex + 2 : 0, 0, codePoint, codePoint + 1);
  29140. return data;
  29141. }
  29142. if (codePoint == end) {
  29143. if (codePoint + 1 == data[index + 2]) {
  29144. data.splice(index, 4, start, data[index + 3]);
  29145. return data;
  29146. }
  29147. data[index + 1] = codePoint + 1;
  29148. return data;
  29149. }
  29150. lastIndex = index;
  29151. index += 2;
  29152. }
  29153. data.push(codePoint, codePoint + 1);
  29154. return data;
  29155. };
  29156. var dataAddData = function(dataA, dataB) {
  29157. var index = 0;
  29158. var start;
  29159. var end;
  29160. var data = dataA.slice();
  29161. var length = dataB.length;
  29162. while (index < length) {
  29163. start = dataB[index];
  29164. end = dataB[index + 1] - 1;
  29165. if (start == end) {
  29166. data = dataAdd(data, start);
  29167. } else {
  29168. data = dataAddRange(data, start, end);
  29169. }
  29170. index += 2;
  29171. }
  29172. return data;
  29173. };
  29174. var dataRemoveData = function(dataA, dataB) {
  29175. var index = 0;
  29176. var start;
  29177. var end;
  29178. var data = dataA.slice();
  29179. var length = dataB.length;
  29180. while (index < length) {
  29181. start = dataB[index];
  29182. end = dataB[index + 1] - 1;
  29183. if (start == end) {
  29184. data = dataRemove(data, start);
  29185. } else {
  29186. data = dataRemoveRange(data, start, end);
  29187. }
  29188. index += 2;
  29189. }
  29190. return data;
  29191. };
  29192. var dataAddRange = function(data, rangeStart, rangeEnd) {
  29193. if (rangeEnd < rangeStart) {
  29194. throw Error(ERRORS.rangeOrder);
  29195. }
  29196. if (rangeStart < 0x0 || rangeStart > 0x10FFFF || rangeEnd < 0x0 || rangeEnd > 0x10FFFF) {
  29197. throw RangeError(ERRORS.codePointRange);
  29198. }
  29199. var index = 0;
  29200. var start;
  29201. var end;
  29202. var added = false;
  29203. var length = data.length;
  29204. while (index < length) {
  29205. start = data[index];
  29206. end = data[index + 1];
  29207. if (added) {
  29208. if (start == rangeEnd + 1) {
  29209. data.splice(index - 1, 2);
  29210. return data;
  29211. }
  29212. if (start > rangeEnd) {
  29213. return data;
  29214. }
  29215. if (start >= rangeStart && start <= rangeEnd) {
  29216. if (end > rangeStart && end - 1 <= rangeEnd) {
  29217. data.splice(index, 2);
  29218. index -= 2;
  29219. } else {
  29220. data.splice(index - 1, 2);
  29221. index -= 2;
  29222. }
  29223. }
  29224. } else if (start == rangeEnd + 1) {
  29225. data[index] = rangeStart;
  29226. return data;
  29227. } else if (start > rangeEnd) {
  29228. data.splice(index, 0, rangeStart, rangeEnd + 1);
  29229. return data;
  29230. } else if (rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end) {
  29231. return data;
  29232. } else if ((rangeStart >= start && rangeStart < end) || end == rangeStart) {
  29233. data[index + 1] = rangeEnd + 1;
  29234. added = true;
  29235. } else if (rangeStart <= start && rangeEnd + 1 >= end) {
  29236. data[index] = rangeStart;
  29237. data[index + 1] = rangeEnd + 1;
  29238. added = true;
  29239. }
  29240. index += 2;
  29241. }
  29242. if (!added) {
  29243. data.push(rangeStart, rangeEnd + 1);
  29244. }
  29245. return data;
  29246. };
  29247. var dataContains = function(data, codePoint) {
  29248. var index = 0;
  29249. var length = data.length;
  29250. var start = data[index];
  29251. var end = data[length - 1];
  29252. if (length >= 2) {
  29253. if (codePoint < start || codePoint > end) {
  29254. return false;
  29255. }
  29256. }
  29257. while (index < length) {
  29258. start = data[index];
  29259. end = data[index + 1];
  29260. if (codePoint >= start && codePoint < end) {
  29261. return true;
  29262. }
  29263. index += 2;
  29264. }
  29265. return false;
  29266. };
  29267. var dataIntersection = function(data, codePoints) {
  29268. var index = 0;
  29269. var length = codePoints.length;
  29270. var codePoint;
  29271. var result = [];
  29272. while (index < length) {
  29273. codePoint = codePoints[index];
  29274. if (dataContains(data, codePoint)) {
  29275. result.push(codePoint);
  29276. }
  29277. ++index;
  29278. }
  29279. return dataFromCodePoints(result);
  29280. };
  29281. var dataIsEmpty = function(data) {
  29282. return !data.length;
  29283. };
  29284. var dataIsSingleton = function(data) {
  29285. return data.length == 2 && data[0] + 1 == data[1];
  29286. };
  29287. var dataToArray = function(data) {
  29288. var index = 0;
  29289. var start;
  29290. var end;
  29291. var result = [];
  29292. var length = data.length;
  29293. while (index < length) {
  29294. start = data[index];
  29295. end = data[index + 1];
  29296. while (start < end) {
  29297. result.push(start);
  29298. ++start;
  29299. }
  29300. index += 2;
  29301. }
  29302. return result;
  29303. };
  29304. var floor = Math.floor;
  29305. var highSurrogate = function(codePoint) {
  29306. return parseInt(floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN, 10);
  29307. };
  29308. var lowSurrogate = function(codePoint) {
  29309. return parseInt((codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN, 10);
  29310. };
  29311. var stringFromCharCode = String.fromCharCode;
  29312. var codePointToString = function(codePoint) {
  29313. var string;
  29314. if (codePoint == 0x09) {
  29315. string = '\\t';
  29316. } else if (codePoint == 0x0A) {
  29317. string = '\\n';
  29318. } else if (codePoint == 0x0C) {
  29319. string = '\\f';
  29320. } else if (codePoint == 0x0D) {
  29321. string = '\\r';
  29322. } else if (codePoint == 0x5C) {
  29323. string = '\\\\';
  29324. } else if (codePoint == 0x24 || (codePoint >= 0x28 && codePoint <= 0x2B) || codePoint == 0x2D || codePoint == 0x2E || codePoint == 0x3F || (codePoint >= 0x5B && codePoint <= 0x5E) || (codePoint >= 0x7B && codePoint <= 0x7D)) {
  29325. string = '\\' + stringFromCharCode(codePoint);
  29326. } else if (codePoint >= 0x20 && codePoint <= 0x7E) {
  29327. string = stringFromCharCode(codePoint);
  29328. } else if (codePoint <= 0xFF) {
  29329. string = '\\x' + pad(hex(codePoint), 2);
  29330. } else {
  29331. string = '\\u' + pad(hex(codePoint), 4);
  29332. }
  29333. return string;
  29334. };
  29335. var symbolToCodePoint = function(symbol) {
  29336. var length = symbol.length;
  29337. var first = symbol.charCodeAt(0);
  29338. var second;
  29339. if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > 1) {
  29340. second = symbol.charCodeAt(1);
  29341. return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;
  29342. }
  29343. return first;
  29344. };
  29345. var createBMPCharacterClasses = function(data) {
  29346. var result = '';
  29347. var index = 0;
  29348. var start;
  29349. var end;
  29350. var length = data.length;
  29351. if (dataIsSingleton(data)) {
  29352. return codePointToString(data[0]);
  29353. }
  29354. while (index < length) {
  29355. start = data[index];
  29356. end = data[index + 1] - 1;
  29357. if (start == end) {
  29358. result += codePointToString(start);
  29359. } else if (start + 1 == end) {
  29360. result += codePointToString(start) + codePointToString(end);
  29361. } else {
  29362. result += codePointToString(start) + '-' + codePointToString(end);
  29363. }
  29364. index += 2;
  29365. }
  29366. return '[' + result + ']';
  29367. };
  29368. var splitAtBMP = function(data) {
  29369. var loneHighSurrogates = [];
  29370. var loneLowSurrogates = [];
  29371. var bmp = [];
  29372. var astral = [];
  29373. var index = 0;
  29374. var start;
  29375. var end;
  29376. var length = data.length;
  29377. while (index < length) {
  29378. start = data[index];
  29379. end = data[index + 1] - 1;
  29380. if (start < HIGH_SURROGATE_MIN) {
  29381. if (end < HIGH_SURROGATE_MIN) {
  29382. bmp.push(start, end + 1);
  29383. }
  29384. if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) {
  29385. bmp.push(start, HIGH_SURROGATE_MIN);
  29386. loneHighSurrogates.push(HIGH_SURROGATE_MIN, end + 1);
  29387. }
  29388. if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
  29389. bmp.push(start, HIGH_SURROGATE_MIN);
  29390. loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);
  29391. loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1);
  29392. }
  29393. if (end > LOW_SURROGATE_MAX) {
  29394. bmp.push(start, HIGH_SURROGATE_MIN);
  29395. loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);
  29396. loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1);
  29397. if (end <= 0xFFFF) {
  29398. bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
  29399. } else {
  29400. bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
  29401. astral.push(0xFFFF + 1, end + 1);
  29402. }
  29403. }
  29404. } else if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) {
  29405. if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) {
  29406. loneHighSurrogates.push(start, end + 1);
  29407. }
  29408. if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
  29409. loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);
  29410. loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1);
  29411. }
  29412. if (end > LOW_SURROGATE_MAX) {
  29413. loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);
  29414. loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1);
  29415. if (end <= 0xFFFF) {
  29416. bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
  29417. } else {
  29418. bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
  29419. astral.push(0xFFFF + 1, end + 1);
  29420. }
  29421. }
  29422. } else if (start >= LOW_SURROGATE_MIN && start <= LOW_SURROGATE_MAX) {
  29423. if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
  29424. loneLowSurrogates.push(start, end + 1);
  29425. }
  29426. if (end > LOW_SURROGATE_MAX) {
  29427. loneLowSurrogates.push(start, LOW_SURROGATE_MAX + 1);
  29428. if (end <= 0xFFFF) {
  29429. bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
  29430. } else {
  29431. bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
  29432. astral.push(0xFFFF + 1, end + 1);
  29433. }
  29434. }
  29435. } else if (start > LOW_SURROGATE_MAX && start <= 0xFFFF) {
  29436. if (end <= 0xFFFF) {
  29437. bmp.push(start, end + 1);
  29438. } else {
  29439. bmp.push(start, 0xFFFF + 1);
  29440. astral.push(0xFFFF + 1, end + 1);
  29441. }
  29442. } else {
  29443. astral.push(start, end + 1);
  29444. }
  29445. index += 2;
  29446. }
  29447. return {
  29448. 'loneHighSurrogates': loneHighSurrogates,
  29449. 'loneLowSurrogates': loneLowSurrogates,
  29450. 'bmp': bmp,
  29451. 'astral': astral
  29452. };
  29453. };
  29454. var optimizeSurrogateMappings = function(surrogateMappings) {
  29455. var result = [];
  29456. var tmpLow = [];
  29457. var addLow = false;
  29458. var mapping;
  29459. var nextMapping;
  29460. var highSurrogates;
  29461. var lowSurrogates;
  29462. var nextHighSurrogates;
  29463. var nextLowSurrogates;
  29464. var index = -1;
  29465. var length = surrogateMappings.length;
  29466. while (++index < length) {
  29467. mapping = surrogateMappings[index];
  29468. nextMapping = surrogateMappings[index + 1];
  29469. if (!nextMapping) {
  29470. result.push(mapping);
  29471. continue;
  29472. }
  29473. highSurrogates = mapping[0];
  29474. lowSurrogates = mapping[1];
  29475. nextHighSurrogates = nextMapping[0];
  29476. nextLowSurrogates = nextMapping[1];
  29477. tmpLow = lowSurrogates;
  29478. while (nextHighSurrogates && highSurrogates[0] == nextHighSurrogates[0] && highSurrogates[1] == nextHighSurrogates[1]) {
  29479. if (dataIsSingleton(nextLowSurrogates)) {
  29480. tmpLow = dataAdd(tmpLow, nextLowSurrogates[0]);
  29481. } else {
  29482. tmpLow = dataAddRange(tmpLow, nextLowSurrogates[0], nextLowSurrogates[1] - 1);
  29483. }
  29484. ++index;
  29485. mapping = surrogateMappings[index];
  29486. highSurrogates = mapping[0];
  29487. lowSurrogates = mapping[1];
  29488. nextMapping = surrogateMappings[index + 1];
  29489. nextHighSurrogates = nextMapping && nextMapping[0];
  29490. nextLowSurrogates = nextMapping && nextMapping[1];
  29491. addLow = true;
  29492. }
  29493. result.push([highSurrogates, addLow ? tmpLow : lowSurrogates]);
  29494. addLow = false;
  29495. }
  29496. return optimizeByLowSurrogates(result);
  29497. };
  29498. var optimizeByLowSurrogates = function(surrogateMappings) {
  29499. if (surrogateMappings.length == 1) {
  29500. return surrogateMappings;
  29501. }
  29502. var index = -1;
  29503. var innerIndex = -1;
  29504. while (++index < surrogateMappings.length) {
  29505. var mapping = surrogateMappings[index];
  29506. var lowSurrogates = mapping[1];
  29507. var lowSurrogateStart = lowSurrogates[0];
  29508. var lowSurrogateEnd = lowSurrogates[1];
  29509. innerIndex = index;
  29510. while (++innerIndex < surrogateMappings.length) {
  29511. var otherMapping = surrogateMappings[innerIndex];
  29512. var otherLowSurrogates = otherMapping[1];
  29513. var otherLowSurrogateStart = otherLowSurrogates[0];
  29514. var otherLowSurrogateEnd = otherLowSurrogates[1];
  29515. if (lowSurrogateStart == otherLowSurrogateStart && lowSurrogateEnd == otherLowSurrogateEnd) {
  29516. if (dataIsSingleton(otherMapping[0])) {
  29517. mapping[0] = dataAdd(mapping[0], otherMapping[0][0]);
  29518. } else {
  29519. mapping[0] = dataAddRange(mapping[0], otherMapping[0][0], otherMapping[0][1] - 1);
  29520. }
  29521. surrogateMappings.splice(innerIndex, 1);
  29522. --innerIndex;
  29523. }
  29524. }
  29525. }
  29526. return surrogateMappings;
  29527. };
  29528. var surrogateSet = function(data) {
  29529. if (!data.length) {
  29530. return [];
  29531. }
  29532. var index = 0;
  29533. var start;
  29534. var end;
  29535. var startHigh;
  29536. var startLow;
  29537. var prevStartHigh = 0;
  29538. var prevEndHigh = 0;
  29539. var tmpLow = [];
  29540. var endHigh;
  29541. var endLow;
  29542. var surrogateMappings = [];
  29543. var length = data.length;
  29544. var dataHigh = [];
  29545. while (index < length) {
  29546. start = data[index];
  29547. end = data[index + 1] - 1;
  29548. startHigh = highSurrogate(start);
  29549. startLow = lowSurrogate(start);
  29550. endHigh = highSurrogate(end);
  29551. endLow = lowSurrogate(end);
  29552. var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN;
  29553. var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX;
  29554. var complete = false;
  29555. if (startHigh == endHigh || startsWithLowestLowSurrogate && endsWithHighestLowSurrogate) {
  29556. surrogateMappings.push([[startHigh, endHigh + 1], [startLow, endLow + 1]]);
  29557. complete = true;
  29558. } else {
  29559. surrogateMappings.push([[startHigh, startHigh + 1], [startLow, LOW_SURROGATE_MAX + 1]]);
  29560. }
  29561. if (!complete && startHigh + 1 < endHigh) {
  29562. if (endsWithHighestLowSurrogate) {
  29563. surrogateMappings.push([[startHigh + 1, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]);
  29564. complete = true;
  29565. } else {
  29566. surrogateMappings.push([[startHigh + 1, endHigh], [LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1]]);
  29567. }
  29568. }
  29569. if (!complete) {
  29570. surrogateMappings.push([[endHigh, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]);
  29571. }
  29572. prevStartHigh = startHigh;
  29573. prevEndHigh = endHigh;
  29574. index += 2;
  29575. }
  29576. return optimizeSurrogateMappings(surrogateMappings);
  29577. };
  29578. var createSurrogateCharacterClasses = function(surrogateMappings) {
  29579. var result = [];
  29580. forEach(surrogateMappings, function(surrogateMapping) {
  29581. var highSurrogates = surrogateMapping[0];
  29582. var lowSurrogates = surrogateMapping[1];
  29583. result.push(createBMPCharacterClasses(highSurrogates) + createBMPCharacterClasses(lowSurrogates));
  29584. });
  29585. return result.join('|');
  29586. };
  29587. var createCharacterClassesFromData = function(data, bmpOnly) {
  29588. var result = [];
  29589. var parts = splitAtBMP(data);
  29590. var loneHighSurrogates = parts.loneHighSurrogates;
  29591. var loneLowSurrogates = parts.loneLowSurrogates;
  29592. var bmp = parts.bmp;
  29593. var astral = parts.astral;
  29594. var hasAstral = !dataIsEmpty(parts.astral);
  29595. var hasLoneHighSurrogates = !dataIsEmpty(loneHighSurrogates);
  29596. var hasLoneLowSurrogates = !dataIsEmpty(loneLowSurrogates);
  29597. var surrogateMappings = surrogateSet(astral);
  29598. if (bmpOnly) {
  29599. bmp = dataAddData(bmp, loneHighSurrogates);
  29600. hasLoneHighSurrogates = false;
  29601. bmp = dataAddData(bmp, loneLowSurrogates);
  29602. hasLoneLowSurrogates = false;
  29603. }
  29604. if (!dataIsEmpty(bmp)) {
  29605. result.push(createBMPCharacterClasses(bmp));
  29606. }
  29607. if (surrogateMappings.length) {
  29608. result.push(createSurrogateCharacterClasses(surrogateMappings));
  29609. }
  29610. if (hasLoneHighSurrogates) {
  29611. result.push(createBMPCharacterClasses(loneHighSurrogates) + '(?![\\uDC00-\\uDFFF])');
  29612. }
  29613. if (hasLoneLowSurrogates) {
  29614. result.push('(?:[^\\uD800-\\uDBFF]|^)' + createBMPCharacterClasses(loneLowSurrogates));
  29615. }
  29616. return result.join('|');
  29617. };
  29618. var regenerate = function(value) {
  29619. if (arguments.length > 1) {
  29620. value = slice.call(arguments);
  29621. }
  29622. if (this instanceof regenerate) {
  29623. this.data = [];
  29624. return value ? this.add(value) : this;
  29625. }
  29626. return (new regenerate).add(value);
  29627. };
  29628. regenerate.version = '1.2.0';
  29629. var proto = regenerate.prototype;
  29630. extend(proto, {
  29631. 'add': function(value) {
  29632. var $this = this;
  29633. if (value == null) {
  29634. return $this;
  29635. }
  29636. if (value instanceof regenerate) {
  29637. $this.data = dataAddData($this.data, value.data);
  29638. return $this;
  29639. }
  29640. if (arguments.length > 1) {
  29641. value = slice.call(arguments);
  29642. }
  29643. if (isArray(value)) {
  29644. forEach(value, function(item) {
  29645. $this.add(item);
  29646. });
  29647. return $this;
  29648. }
  29649. $this.data = dataAdd($this.data, isNumber(value) ? value : symbolToCodePoint(value));
  29650. return $this;
  29651. },
  29652. 'remove': function(value) {
  29653. var $this = this;
  29654. if (value == null) {
  29655. return $this;
  29656. }
  29657. if (value instanceof regenerate) {
  29658. $this.data = dataRemoveData($this.data, value.data);
  29659. return $this;
  29660. }
  29661. if (arguments.length > 1) {
  29662. value = slice.call(arguments);
  29663. }
  29664. if (isArray(value)) {
  29665. forEach(value, function(item) {
  29666. $this.remove(item);
  29667. });
  29668. return $this;
  29669. }
  29670. $this.data = dataRemove($this.data, isNumber(value) ? value : symbolToCodePoint(value));
  29671. return $this;
  29672. },
  29673. 'addRange': function(start, end) {
  29674. var $this = this;
  29675. $this.data = dataAddRange($this.data, isNumber(start) ? start : symbolToCodePoint(start), isNumber(end) ? end : symbolToCodePoint(end));
  29676. return $this;
  29677. },
  29678. 'removeRange': function(start, end) {
  29679. var $this = this;
  29680. var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start);
  29681. var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end);
  29682. $this.data = dataRemoveRange($this.data, startCodePoint, endCodePoint);
  29683. return $this;
  29684. },
  29685. 'intersection': function(argument) {
  29686. var $this = this;
  29687. var array = argument instanceof regenerate ? dataToArray(argument.data) : argument;
  29688. $this.data = dataIntersection($this.data, array);
  29689. return $this;
  29690. },
  29691. 'contains': function(codePoint) {
  29692. return dataContains(this.data, isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint));
  29693. },
  29694. 'clone': function() {
  29695. var set = new regenerate;
  29696. set.data = this.data.slice(0);
  29697. return set;
  29698. },
  29699. 'toString': function(options) {
  29700. var result = createCharacterClassesFromData(this.data, options ? options.bmpOnly : false);
  29701. return result.replace(regexNull, '\\0$1');
  29702. },
  29703. 'toRegExp': function(flags) {
  29704. return RegExp(this.toString(), flags || '');
  29705. },
  29706. 'valueOf': function() {
  29707. return dataToArray(this.data);
  29708. }
  29709. });
  29710. proto.toArray = proto.valueOf;
  29711. if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
  29712. define(function() {
  29713. return regenerate;
  29714. });
  29715. } else if (freeExports && !freeExports.nodeType) {
  29716. if (freeModule) {
  29717. freeModule.exports = regenerate;
  29718. } else {
  29719. freeExports.regenerate = regenerate;
  29720. }
  29721. } else {
  29722. root.regenerate = regenerate;
  29723. }
  29724. }((void 0)));
  29725. modules['regenerate'] = module.exports || window.regenerate;
  29726. ;
  29727. (function() {
  29728. 'use strict';
  29729. var objectTypes = {
  29730. 'function': true,
  29731. 'object': true
  29732. };
  29733. var root = (objectTypes[typeof window] && window) || this;
  29734. var oldRoot = root;
  29735. var freeExports = objectTypes[typeof exports] && exports;
  29736. var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
  29737. var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;
  29738. if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {
  29739. root = freeGlobal;
  29740. }
  29741. var stringFromCharCode = String.fromCharCode;
  29742. var floor = Math.floor;
  29743. function fromCodePoint() {
  29744. var MAX_SIZE = 0x4000;
  29745. var codeUnits = [];
  29746. var highSurrogate;
  29747. var lowSurrogate;
  29748. var index = -1;
  29749. var length = arguments.length;
  29750. if (!length) {
  29751. return '';
  29752. }
  29753. var result = '';
  29754. while (++index < length) {
  29755. var codePoint = Number(arguments[index]);
  29756. if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) {
  29757. throw RangeError('Invalid code point: ' + codePoint);
  29758. }
  29759. if (codePoint <= 0xFFFF) {
  29760. codeUnits.push(codePoint);
  29761. } else {
  29762. codePoint -= 0x10000;
  29763. highSurrogate = (codePoint >> 10) + 0xD800;
  29764. lowSurrogate = (codePoint % 0x400) + 0xDC00;
  29765. codeUnits.push(highSurrogate, lowSurrogate);
  29766. }
  29767. if (index + 1 == length || codeUnits.length > MAX_SIZE) {
  29768. result += stringFromCharCode.apply(null, codeUnits);
  29769. codeUnits.length = 0;
  29770. }
  29771. }
  29772. return result;
  29773. }
  29774. function assertType(type, expected) {
  29775. if (expected.indexOf('|') == -1) {
  29776. if (type == expected) {
  29777. return;
  29778. }
  29779. throw Error('Invalid node type: ' + type);
  29780. }
  29781. expected = assertType.hasOwnProperty(expected) ? assertType[expected] : (assertType[expected] = RegExp('^(?:' + expected + ')$'));
  29782. if (expected.test(type)) {
  29783. return;
  29784. }
  29785. throw Error('Invalid node type: ' + type);
  29786. }
  29787. function generate(node) {
  29788. var type = node.type;
  29789. if (generate.hasOwnProperty(type) && typeof generate[type] == 'function') {
  29790. return generate[type](node);
  29791. }
  29792. throw Error('Invalid node type: ' + type);
  29793. }
  29794. function generateAlternative(node) {
  29795. assertType(node.type, 'alternative');
  29796. var terms = node.body,
  29797. length = terms ? terms.length : 0;
  29798. if (length == 1) {
  29799. return generateTerm(terms[0]);
  29800. } else {
  29801. var i = -1,
  29802. result = '';
  29803. while (++i < length) {
  29804. result += generateTerm(terms[i]);
  29805. }
  29806. return result;
  29807. }
  29808. }
  29809. function generateAnchor(node) {
  29810. assertType(node.type, 'anchor');
  29811. switch (node.kind) {
  29812. case 'start':
  29813. return '^';
  29814. case 'end':
  29815. return '$';
  29816. case 'boundary':
  29817. return '\\b';
  29818. case 'not-boundary':
  29819. return '\\B';
  29820. default:
  29821. throw Error('Invalid assertion');
  29822. }
  29823. }
  29824. function generateAtom(node) {
  29825. assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value');
  29826. return generate(node);
  29827. }
  29828. function generateCharacterClass(node) {
  29829. assertType(node.type, 'characterClass');
  29830. var classRanges = node.body,
  29831. length = classRanges ? classRanges.length : 0;
  29832. var i = -1,
  29833. result = '[';
  29834. if (node.negative) {
  29835. result += '^';
  29836. }
  29837. while (++i < length) {
  29838. result += generateClassAtom(classRanges[i]);
  29839. }
  29840. result += ']';
  29841. return result;
  29842. }
  29843. function generateCharacterClassEscape(node) {
  29844. assertType(node.type, 'characterClassEscape');
  29845. return '\\' + node.value;
  29846. }
  29847. function generateCharacterClassRange(node) {
  29848. assertType(node.type, 'characterClassRange');
  29849. var min = node.min,
  29850. max = node.max;
  29851. if (min.type == 'characterClassRange' || max.type == 'characterClassRange') {
  29852. throw Error('Invalid character class range');
  29853. }
  29854. return generateClassAtom(min) + '-' + generateClassAtom(max);
  29855. }
  29856. function generateClassAtom(node) {
  29857. assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value');
  29858. return generate(node);
  29859. }
  29860. function generateDisjunction(node) {
  29861. assertType(node.type, 'disjunction');
  29862. var body = node.body,
  29863. length = body ? body.length : 0;
  29864. if (length == 0) {
  29865. throw Error('No body');
  29866. } else if (length == 1) {
  29867. return generate(body[0]);
  29868. } else {
  29869. var i = -1,
  29870. result = '';
  29871. while (++i < length) {
  29872. if (i != 0) {
  29873. result += '|';
  29874. }
  29875. result += generate(body[i]);
  29876. }
  29877. return result;
  29878. }
  29879. }
  29880. function generateDot(node) {
  29881. assertType(node.type, 'dot');
  29882. return '.';
  29883. }
  29884. function generateGroup(node) {
  29885. assertType(node.type, 'group');
  29886. var result = '(';
  29887. switch (node.behavior) {
  29888. case 'normal':
  29889. break;
  29890. case 'ignore':
  29891. result += '?:';
  29892. break;
  29893. case 'lookahead':
  29894. result += '?=';
  29895. break;
  29896. case 'negativeLookahead':
  29897. result += '?!';
  29898. break;
  29899. default:
  29900. throw Error('Invalid behaviour: ' + node.behaviour);
  29901. }
  29902. var body = node.body,
  29903. length = body ? body.length : 0;
  29904. if (length == 1) {
  29905. result += generate(body[0]);
  29906. } else {
  29907. var i = -1;
  29908. while (++i < length) {
  29909. result += generate(body[i]);
  29910. }
  29911. }
  29912. result += ')';
  29913. return result;
  29914. }
  29915. function generateQuantifier(node) {
  29916. assertType(node.type, 'quantifier');
  29917. var quantifier = '',
  29918. min = node.min,
  29919. max = node.max;
  29920. switch (max) {
  29921. case undefined:
  29922. case null:
  29923. switch (min) {
  29924. case 0:
  29925. quantifier = '*';
  29926. break;
  29927. case 1:
  29928. quantifier = '+';
  29929. break;
  29930. default:
  29931. quantifier = '{' + min + ',}';
  29932. break;
  29933. }
  29934. break;
  29935. default:
  29936. if (min == max) {
  29937. quantifier = '{' + min + '}';
  29938. } else if (min == 0 && max == 1) {
  29939. quantifier = '?';
  29940. } else {
  29941. quantifier = '{' + min + ',' + max + '}';
  29942. }
  29943. break;
  29944. }
  29945. if (!node.greedy) {
  29946. quantifier += '?';
  29947. }
  29948. return generateAtom(node.body[0]) + quantifier;
  29949. }
  29950. function generateReference(node) {
  29951. assertType(node.type, 'reference');
  29952. return '\\' + node.matchIndex;
  29953. }
  29954. function generateTerm(node) {
  29955. assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value');
  29956. return generate(node);
  29957. }
  29958. function generateValue(node) {
  29959. assertType(node.type, 'value');
  29960. var kind = node.kind,
  29961. codePoint = node.codePoint;
  29962. switch (kind) {
  29963. case 'controlLetter':
  29964. return '\\c' + fromCodePoint(codePoint + 64);
  29965. case 'hexadecimalEscape':
  29966. return '\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2);
  29967. case 'identifier':
  29968. return '\\' + fromCodePoint(codePoint);
  29969. case 'null':
  29970. return '\\' + codePoint;
  29971. case 'octal':
  29972. return '\\' + codePoint.toString(8);
  29973. case 'singleEscape':
  29974. switch (codePoint) {
  29975. case 0x0008:
  29976. return '\\b';
  29977. case 0x009:
  29978. return '\\t';
  29979. case 0x00A:
  29980. return '\\n';
  29981. case 0x00B:
  29982. return '\\v';
  29983. case 0x00C:
  29984. return '\\f';
  29985. case 0x00D:
  29986. return '\\r';
  29987. default:
  29988. throw Error('Invalid codepoint: ' + codePoint);
  29989. }
  29990. case 'symbol':
  29991. return fromCodePoint(codePoint);
  29992. case 'unicodeEscape':
  29993. return '\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4);
  29994. case 'unicodeCodePointEscape':
  29995. return '\\u{' + codePoint.toString(16).toUpperCase() + '}';
  29996. default:
  29997. throw Error('Unsupported node kind: ' + kind);
  29998. }
  29999. }
  30000. generate.alternative = generateAlternative;
  30001. generate.anchor = generateAnchor;
  30002. generate.characterClass = generateCharacterClass;
  30003. generate.characterClassEscape = generateCharacterClassEscape;
  30004. generate.characterClassRange = generateCharacterClassRange;
  30005. generate.disjunction = generateDisjunction;
  30006. generate.dot = generateDot;
  30007. generate.group = generateGroup;
  30008. generate.quantifier = generateQuantifier;
  30009. generate.reference = generateReference;
  30010. generate.value = generateValue;
  30011. if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
  30012. define(function() {
  30013. return {'generate': generate};
  30014. });
  30015. } else if (freeExports && freeModule) {
  30016. freeExports.generate = generate;
  30017. } else {
  30018. root.regjsgen = {'generate': generate};
  30019. }
  30020. }.call((void 0)));
  30021. modules['regjsgen'] = {generate: exports.generate || window.regjsgen};
  30022. (function() {
  30023. function parse(str, flags) {
  30024. function addRaw(node) {
  30025. node.raw = str.substring(node.range[0], node.range[1]);
  30026. return node;
  30027. }
  30028. function updateRawStart(node, start) {
  30029. node.range[0] = start;
  30030. return addRaw(node);
  30031. }
  30032. function createAnchor(kind, rawLength) {
  30033. return addRaw({
  30034. type: 'anchor',
  30035. kind: kind,
  30036. range: [pos - rawLength, pos]
  30037. });
  30038. }
  30039. function createValue(kind, codePoint, from, to) {
  30040. return addRaw({
  30041. type: 'value',
  30042. kind: kind,
  30043. codePoint: codePoint,
  30044. range: [from, to]
  30045. });
  30046. }
  30047. function createEscaped(kind, codePoint, value, fromOffset) {
  30048. fromOffset = fromOffset || 0;
  30049. return createValue(kind, codePoint, pos - (value.length + fromOffset), pos);
  30050. }
  30051. function createCharacter(matches) {
  30052. var _char = matches[0];
  30053. var first = _char.charCodeAt(0);
  30054. if (hasUnicodeFlag) {
  30055. var second;
  30056. if (_char.length === 1 && first >= 0xD800 && first <= 0xDBFF) {
  30057. second = lookahead().charCodeAt(0);
  30058. if (second >= 0xDC00 && second <= 0xDFFF) {
  30059. pos++;
  30060. return createValue('symbol', (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000, pos - 2, pos);
  30061. }
  30062. }
  30063. }
  30064. return createValue('symbol', first, pos - 1, pos);
  30065. }
  30066. function createDisjunction(alternatives, from, to) {
  30067. return addRaw({
  30068. type: 'disjunction',
  30069. body: alternatives,
  30070. range: [from, to]
  30071. });
  30072. }
  30073. function createDot() {
  30074. return addRaw({
  30075. type: 'dot',
  30076. range: [pos - 1, pos]
  30077. });
  30078. }
  30079. function createCharacterClassEscape(value) {
  30080. return addRaw({
  30081. type: 'characterClassEscape',
  30082. value: value,
  30083. range: [pos - 2, pos]
  30084. });
  30085. }
  30086. function createReference(matchIndex) {
  30087. return addRaw({
  30088. type: 'reference',
  30089. matchIndex: parseInt(matchIndex, 10),
  30090. range: [pos - 1 - matchIndex.length, pos]
  30091. });
  30092. }
  30093. function createGroup(behavior, disjunction, from, to) {
  30094. return addRaw({
  30095. type: 'group',
  30096. behavior: behavior,
  30097. body: disjunction,
  30098. range: [from, to]
  30099. });
  30100. }
  30101. function createQuantifier(min, max, from, to) {
  30102. if (to == null) {
  30103. from = pos - 1;
  30104. to = pos;
  30105. }
  30106. return addRaw({
  30107. type: 'quantifier',
  30108. min: min,
  30109. max: max,
  30110. greedy: true,
  30111. body: null,
  30112. range: [from, to]
  30113. });
  30114. }
  30115. function createAlternative(terms, from, to) {
  30116. return addRaw({
  30117. type: 'alternative',
  30118. body: terms,
  30119. range: [from, to]
  30120. });
  30121. }
  30122. function createCharacterClass(classRanges, negative, from, to) {
  30123. return addRaw({
  30124. type: 'characterClass',
  30125. body: classRanges,
  30126. negative: negative,
  30127. range: [from, to]
  30128. });
  30129. }
  30130. function createClassRange(min, max, from, to) {
  30131. if (min.codePoint > max.codePoint) {
  30132. bail('invalid range in character class', min.raw + '-' + max.raw, from, to);
  30133. }
  30134. return addRaw({
  30135. type: 'characterClassRange',
  30136. min: min,
  30137. max: max,
  30138. range: [from, to]
  30139. });
  30140. }
  30141. function flattenBody(body) {
  30142. if (body.type === 'alternative') {
  30143. return body.body;
  30144. } else {
  30145. return [body];
  30146. }
  30147. }
  30148. function isEmpty(obj) {
  30149. return obj.type === 'empty';
  30150. }
  30151. function incr(amount) {
  30152. amount = (amount || 1);
  30153. var res = str.substring(pos, pos + amount);
  30154. pos += (amount || 1);
  30155. return res;
  30156. }
  30157. function skip(value) {
  30158. if (!match(value)) {
  30159. bail('character', value);
  30160. }
  30161. }
  30162. function match(value) {
  30163. if (str.indexOf(value, pos) === pos) {
  30164. return incr(value.length);
  30165. }
  30166. }
  30167. function lookahead() {
  30168. return str[pos];
  30169. }
  30170. function current(value) {
  30171. return str.indexOf(value, pos) === pos;
  30172. }
  30173. function next(value) {
  30174. return str[pos + 1] === value;
  30175. }
  30176. function matchReg(regExp) {
  30177. var subStr = str.substring(pos);
  30178. var res = subStr.match(regExp);
  30179. if (res) {
  30180. res.range = [];
  30181. res.range[0] = pos;
  30182. incr(res[0].length);
  30183. res.range[1] = pos;
  30184. }
  30185. return res;
  30186. }
  30187. function parseDisjunction() {
  30188. var res = [],
  30189. from = pos;
  30190. res.push(parseAlternative());
  30191. while (match('|')) {
  30192. res.push(parseAlternative());
  30193. }
  30194. if (res.length === 1) {
  30195. return res[0];
  30196. }
  30197. return createDisjunction(res, from, pos);
  30198. }
  30199. function parseAlternative() {
  30200. var res = [],
  30201. from = pos;
  30202. var term;
  30203. while (term = parseTerm()) {
  30204. res.push(term);
  30205. }
  30206. if (res.length === 1) {
  30207. return res[0];
  30208. }
  30209. return createAlternative(res, from, pos);
  30210. }
  30211. function parseTerm() {
  30212. if (pos >= str.length || current('|') || current(')')) {
  30213. return null;
  30214. }
  30215. var anchor = parseAnchor();
  30216. if (anchor) {
  30217. return anchor;
  30218. }
  30219. var atom = parseAtom();
  30220. if (!atom) {
  30221. bail('Expected atom');
  30222. }
  30223. var quantifier = parseQuantifier() || false;
  30224. if (quantifier) {
  30225. quantifier.body = flattenBody(atom);
  30226. updateRawStart(quantifier, atom.range[0]);
  30227. return quantifier;
  30228. }
  30229. return atom;
  30230. }
  30231. function parseGroup(matchA, typeA, matchB, typeB) {
  30232. var type = null,
  30233. from = pos;
  30234. if (match(matchA)) {
  30235. type = typeA;
  30236. } else if (match(matchB)) {
  30237. type = typeB;
  30238. } else {
  30239. return false;
  30240. }
  30241. var body = parseDisjunction();
  30242. if (!body) {
  30243. bail('Expected disjunction');
  30244. }
  30245. skip(')');
  30246. var group = createGroup(type, flattenBody(body), from, pos);
  30247. if (type == 'normal') {
  30248. if (firstIteration) {
  30249. closedCaptureCounter++;
  30250. }
  30251. }
  30252. return group;
  30253. }
  30254. function parseAnchor() {
  30255. var res,
  30256. from = pos;
  30257. if (match('^')) {
  30258. return createAnchor('start', 1);
  30259. } else if (match('$')) {
  30260. return createAnchor('end', 1);
  30261. } else if (match('\\b')) {
  30262. return createAnchor('boundary', 2);
  30263. } else if (match('\\B')) {
  30264. return createAnchor('not-boundary', 2);
  30265. } else {
  30266. return parseGroup('(?=', 'lookahead', '(?!', 'negativeLookahead');
  30267. }
  30268. }
  30269. function parseQuantifier() {
  30270. var res,
  30271. from = pos;
  30272. var quantifier;
  30273. var min,
  30274. max;
  30275. if (match('*')) {
  30276. quantifier = createQuantifier(0);
  30277. } else if (match('+')) {
  30278. quantifier = createQuantifier(1);
  30279. } else if (match('?')) {
  30280. quantifier = createQuantifier(0, 1);
  30281. } else if (res = matchReg(/^\{([0-9]+)\}/)) {
  30282. min = parseInt(res[1], 10);
  30283. quantifier = createQuantifier(min, min, res.range[0], res.range[1]);
  30284. } else if (res = matchReg(/^\{([0-9]+),\}/)) {
  30285. min = parseInt(res[1], 10);
  30286. quantifier = createQuantifier(min, undefined, res.range[0], res.range[1]);
  30287. } else if (res = matchReg(/^\{([0-9]+),([0-9]+)\}/)) {
  30288. min = parseInt(res[1], 10);
  30289. max = parseInt(res[2], 10);
  30290. if (min > max) {
  30291. bail('numbers out of order in {} quantifier', '', from, pos);
  30292. }
  30293. quantifier = createQuantifier(min, max, res.range[0], res.range[1]);
  30294. }
  30295. if (quantifier) {
  30296. if (match('?')) {
  30297. quantifier.greedy = false;
  30298. quantifier.range[1] += 1;
  30299. }
  30300. }
  30301. return quantifier;
  30302. }
  30303. function parseAtom() {
  30304. var res;
  30305. if (res = matchReg(/^[^^$\\.*+?(){[|]/)) {
  30306. return createCharacter(res);
  30307. } else if (match('.')) {
  30308. return createDot();
  30309. } else if (match('\\')) {
  30310. res = parseAtomEscape();
  30311. if (!res) {
  30312. bail('atomEscape');
  30313. }
  30314. return res;
  30315. } else if (res = parseCharacterClass()) {
  30316. return res;
  30317. } else {
  30318. return parseGroup('(?:', 'ignore', '(', 'normal');
  30319. }
  30320. }
  30321. function parseUnicodeSurrogatePairEscape(firstEscape) {
  30322. if (hasUnicodeFlag) {
  30323. var first,
  30324. second;
  30325. if (firstEscape.kind == 'unicodeEscape' && (first = firstEscape.codePoint) >= 0xD800 && first <= 0xDBFF && current('\\') && next('u')) {
  30326. var prevPos = pos;
  30327. pos++;
  30328. var secondEscape = parseClassEscape();
  30329. if (secondEscape.kind == 'unicodeEscape' && (second = secondEscape.codePoint) >= 0xDC00 && second <= 0xDFFF) {
  30330. firstEscape.range[1] = secondEscape.range[1];
  30331. firstEscape.codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
  30332. firstEscape.type = 'value';
  30333. firstEscape.kind = 'unicodeCodePointEscape';
  30334. addRaw(firstEscape);
  30335. } else {
  30336. pos = prevPos;
  30337. }
  30338. }
  30339. }
  30340. return firstEscape;
  30341. }
  30342. function parseClassEscape() {
  30343. return parseAtomEscape(true);
  30344. }
  30345. function parseAtomEscape(insideCharacterClass) {
  30346. var res,
  30347. from = pos;
  30348. res = parseDecimalEscape();
  30349. if (res) {
  30350. return res;
  30351. }
  30352. if (insideCharacterClass) {
  30353. if (match('b')) {
  30354. return createEscaped('singleEscape', 0x0008, '\\b');
  30355. } else if (match('B')) {
  30356. bail('\\B not possible inside of CharacterClass', '', from);
  30357. }
  30358. }
  30359. res = parseCharacterEscape();
  30360. return res;
  30361. }
  30362. function parseDecimalEscape() {
  30363. var res,
  30364. match;
  30365. if (res = matchReg(/^(?!0)\d+/)) {
  30366. match = res[0];
  30367. var refIdx = parseInt(res[0], 10);
  30368. if (refIdx <= closedCaptureCounter) {
  30369. return createReference(res[0]);
  30370. } else {
  30371. backrefDenied.push(refIdx);
  30372. incr(-res[0].length);
  30373. if (res = matchReg(/^[0-7]{1,3}/)) {
  30374. return createEscaped('octal', parseInt(res[0], 8), res[0], 1);
  30375. } else {
  30376. res = createCharacter(matchReg(/^[89]/));
  30377. return updateRawStart(res, res.range[0] - 1);
  30378. }
  30379. }
  30380. } else if (res = matchReg(/^[0-7]{1,3}/)) {
  30381. match = res[0];
  30382. if (/^0{1,3}$/.test(match)) {
  30383. return createEscaped('null', 0x0000, '0', match.length + 1);
  30384. } else {
  30385. return createEscaped('octal', parseInt(match, 8), match, 1);
  30386. }
  30387. } else if (res = matchReg(/^[dDsSwW]/)) {
  30388. return createCharacterClassEscape(res[0]);
  30389. }
  30390. return false;
  30391. }
  30392. function parseCharacterEscape() {
  30393. var res;
  30394. if (res = matchReg(/^[fnrtv]/)) {
  30395. var codePoint = 0;
  30396. switch (res[0]) {
  30397. case 't':
  30398. codePoint = 0x009;
  30399. break;
  30400. case 'n':
  30401. codePoint = 0x00A;
  30402. break;
  30403. case 'v':
  30404. codePoint = 0x00B;
  30405. break;
  30406. case 'f':
  30407. codePoint = 0x00C;
  30408. break;
  30409. case 'r':
  30410. codePoint = 0x00D;
  30411. break;
  30412. }
  30413. return createEscaped('singleEscape', codePoint, '\\' + res[0]);
  30414. } else if (res = matchReg(/^c([a-zA-Z])/)) {
  30415. return createEscaped('controlLetter', res[1].charCodeAt(0) % 32, res[1], 2);
  30416. } else if (res = matchReg(/^x([0-9a-fA-F]{2})/)) {
  30417. return createEscaped('hexadecimalEscape', parseInt(res[1], 16), res[1], 2);
  30418. } else if (res = matchReg(/^u([0-9a-fA-F]{4})/)) {
  30419. return parseUnicodeSurrogatePairEscape(createEscaped('unicodeEscape', parseInt(res[1], 16), res[1], 2));
  30420. } else if (hasUnicodeFlag && (res = matchReg(/^u\{([0-9a-fA-F]+)\}/))) {
  30421. return createEscaped('unicodeCodePointEscape', parseInt(res[1], 16), res[1], 4);
  30422. } else {
  30423. return parseIdentityEscape();
  30424. }
  30425. }
  30426. function isIdentifierPart(ch) {
  30427. var NonAsciiIdentifierPart = new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]');
  30428. return (ch === 36) || (ch === 95) || (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || (ch >= 48 && ch <= 57) || (ch === 92) || ((ch >= 0x80) && NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
  30429. }
  30430. function parseIdentityEscape() {
  30431. var ZWJ = '\u200C';
  30432. var ZWNJ = '\u200D';
  30433. var tmp;
  30434. if (!isIdentifierPart(lookahead())) {
  30435. tmp = incr();
  30436. return createEscaped('identifier', tmp.charCodeAt(0), tmp, 1);
  30437. }
  30438. if (match(ZWJ)) {
  30439. return createEscaped('identifier', 0x200C, ZWJ);
  30440. } else if (match(ZWNJ)) {
  30441. return createEscaped('identifier', 0x200D, ZWNJ);
  30442. }
  30443. return null;
  30444. }
  30445. function parseCharacterClass() {
  30446. var res,
  30447. from = pos;
  30448. if (res = matchReg(/^\[\^/)) {
  30449. res = parseClassRanges();
  30450. skip(']');
  30451. return createCharacterClass(res, true, from, pos);
  30452. } else if (match('[')) {
  30453. res = parseClassRanges();
  30454. skip(']');
  30455. return createCharacterClass(res, false, from, pos);
  30456. }
  30457. return null;
  30458. }
  30459. function parseClassRanges() {
  30460. var res;
  30461. if (current(']')) {
  30462. return [];
  30463. } else {
  30464. res = parseNonemptyClassRanges();
  30465. if (!res) {
  30466. bail('nonEmptyClassRanges');
  30467. }
  30468. return res;
  30469. }
  30470. }
  30471. function parseHelperClassRanges(atom) {
  30472. var from,
  30473. to,
  30474. res;
  30475. if (current('-') && !next(']')) {
  30476. skip('-');
  30477. res = parseClassAtom();
  30478. if (!res) {
  30479. bail('classAtom');
  30480. }
  30481. to = pos;
  30482. var classRanges = parseClassRanges();
  30483. if (!classRanges) {
  30484. bail('classRanges');
  30485. }
  30486. from = atom.range[0];
  30487. if (classRanges.type === 'empty') {
  30488. return [createClassRange(atom, res, from, to)];
  30489. }
  30490. return [createClassRange(atom, res, from, to)].concat(classRanges);
  30491. }
  30492. res = parseNonemptyClassRangesNoDash();
  30493. if (!res) {
  30494. bail('nonEmptyClassRangesNoDash');
  30495. }
  30496. return [atom].concat(res);
  30497. }
  30498. function parseNonemptyClassRanges() {
  30499. var atom = parseClassAtom();
  30500. if (!atom) {
  30501. bail('classAtom');
  30502. }
  30503. if (current(']')) {
  30504. return [atom];
  30505. }
  30506. return parseHelperClassRanges(atom);
  30507. }
  30508. function parseNonemptyClassRangesNoDash() {
  30509. var res = parseClassAtom();
  30510. if (!res) {
  30511. bail('classAtom');
  30512. }
  30513. if (current(']')) {
  30514. return res;
  30515. }
  30516. return parseHelperClassRanges(res);
  30517. }
  30518. function parseClassAtom() {
  30519. if (match('-')) {
  30520. return createCharacter('-');
  30521. } else {
  30522. return parseClassAtomNoDash();
  30523. }
  30524. }
  30525. function parseClassAtomNoDash() {
  30526. var res;
  30527. if (res = matchReg(/^[^\\\]-]/)) {
  30528. return createCharacter(res[0]);
  30529. } else if (match('\\')) {
  30530. res = parseClassEscape();
  30531. if (!res) {
  30532. bail('classEscape');
  30533. }
  30534. return parseUnicodeSurrogatePairEscape(res);
  30535. }
  30536. }
  30537. function bail(message, details, from, to) {
  30538. from = from == null ? pos : from;
  30539. to = to == null ? from : to;
  30540. var contextStart = Math.max(0, from - 10);
  30541. var contextEnd = Math.min(to + 10, str.length);
  30542. var context = ' ' + str.substring(contextStart, contextEnd);
  30543. var pointer = ' ' + new Array(from - contextStart + 1).join(' ') + '^';
  30544. throw SyntaxError(message + ' at position ' + from + (details ? ': ' + details : '') + '\n' + context + '\n' + pointer);
  30545. }
  30546. var backrefDenied = [];
  30547. var closedCaptureCounter = 0;
  30548. var firstIteration = true;
  30549. var hasUnicodeFlag = (flags || "").indexOf("u") !== -1;
  30550. var pos = 0;
  30551. str = String(str);
  30552. if (str === '') {
  30553. str = '(?:)';
  30554. }
  30555. var result = parseDisjunction();
  30556. if (result.range[1] !== str.length) {
  30557. bail('Could not parse entire input - got stuck', '', result.range[1]);
  30558. }
  30559. for (var i = 0; i < backrefDenied.length; i++) {
  30560. if (backrefDenied[i] <= closedCaptureCounter) {
  30561. pos = 0;
  30562. firstIteration = false;
  30563. return parseDisjunction();
  30564. }
  30565. }
  30566. return result;
  30567. }
  30568. var regjsparser = {parse: parse};
  30569. if (typeof module !== 'undefined' && module.exports) {
  30570. module.exports = regjsparser;
  30571. } else {
  30572. window.regjsparser = regjsparser;
  30573. }
  30574. }());
  30575. modules['regjsparser'] = module.exports || window.regjsparser;
  30576. modules['./data/iu-mappings.json'] = ({
  30577. "75": 8490,
  30578. "83": 383,
  30579. "107": 8490,
  30580. "115": 383,
  30581. "181": 924,
  30582. "197": 8491,
  30583. "383": 83,
  30584. "452": 453,
  30585. "453": 452,
  30586. "455": 456,
  30587. "456": 455,
  30588. "458": 459,
  30589. "459": 458,
  30590. "497": 498,
  30591. "498": 497,
  30592. "837": 8126,
  30593. "914": 976,
  30594. "917": 1013,
  30595. "920": 1012,
  30596. "921": 8126,
  30597. "922": 1008,
  30598. "924": 181,
  30599. "928": 982,
  30600. "929": 1009,
  30601. "931": 962,
  30602. "934": 981,
  30603. "937": 8486,
  30604. "962": 931,
  30605. "976": 914,
  30606. "977": 1012,
  30607. "981": 934,
  30608. "982": 928,
  30609. "1008": 922,
  30610. "1009": 929,
  30611. "1012": [920, 977],
  30612. "1013": 917,
  30613. "7776": 7835,
  30614. "7835": 7776,
  30615. "8126": [837, 921],
  30616. "8486": 937,
  30617. "8490": 75,
  30618. "8491": 197,
  30619. "66560": 66600,
  30620. "66561": 66601,
  30621. "66562": 66602,
  30622. "66563": 66603,
  30623. "66564": 66604,
  30624. "66565": 66605,
  30625. "66566": 66606,
  30626. "66567": 66607,
  30627. "66568": 66608,
  30628. "66569": 66609,
  30629. "66570": 66610,
  30630. "66571": 66611,
  30631. "66572": 66612,
  30632. "66573": 66613,
  30633. "66574": 66614,
  30634. "66575": 66615,
  30635. "66576": 66616,
  30636. "66577": 66617,
  30637. "66578": 66618,
  30638. "66579": 66619,
  30639. "66580": 66620,
  30640. "66581": 66621,
  30641. "66582": 66622,
  30642. "66583": 66623,
  30643. "66584": 66624,
  30644. "66585": 66625,
  30645. "66586": 66626,
  30646. "66587": 66627,
  30647. "66588": 66628,
  30648. "66589": 66629,
  30649. "66590": 66630,
  30650. "66591": 66631,
  30651. "66592": 66632,
  30652. "66593": 66633,
  30653. "66594": 66634,
  30654. "66595": 66635,
  30655. "66596": 66636,
  30656. "66597": 66637,
  30657. "66598": 66638,
  30658. "66599": 66639,
  30659. "66600": 66560,
  30660. "66601": 66561,
  30661. "66602": 66562,
  30662. "66603": 66563,
  30663. "66604": 66564,
  30664. "66605": 66565,
  30665. "66606": 66566,
  30666. "66607": 66567,
  30667. "66608": 66568,
  30668. "66609": 66569,
  30669. "66610": 66570,
  30670. "66611": 66571,
  30671. "66612": 66572,
  30672. "66613": 66573,
  30673. "66614": 66574,
  30674. "66615": 66575,
  30675. "66616": 66576,
  30676. "66617": 66577,
  30677. "66618": 66578,
  30678. "66619": 66579,
  30679. "66620": 66580,
  30680. "66621": 66581,
  30681. "66622": 66582,
  30682. "66623": 66583,
  30683. "66624": 66584,
  30684. "66625": 66585,
  30685. "66626": 66586,
  30686. "66627": 66587,
  30687. "66628": 66588,
  30688. "66629": 66589,
  30689. "66630": 66590,
  30690. "66631": 66591,
  30691. "66632": 66592,
  30692. "66633": 66593,
  30693. "66634": 66594,
  30694. "66635": 66595,
  30695. "66636": 66596,
  30696. "66637": 66597,
  30697. "66638": 66598,
  30698. "66639": 66599,
  30699. "71840": 71872,
  30700. "71841": 71873,
  30701. "71842": 71874,
  30702. "71843": 71875,
  30703. "71844": 71876,
  30704. "71845": 71877,
  30705. "71846": 71878,
  30706. "71847": 71879,
  30707. "71848": 71880,
  30708. "71849": 71881,
  30709. "71850": 71882,
  30710. "71851": 71883,
  30711. "71852": 71884,
  30712. "71853": 71885,
  30713. "71854": 71886,
  30714. "71855": 71887,
  30715. "71856": 71888,
  30716. "71857": 71889,
  30717. "71858": 71890,
  30718. "71859": 71891,
  30719. "71860": 71892,
  30720. "71861": 71893,
  30721. "71862": 71894,
  30722. "71863": 71895,
  30723. "71864": 71896,
  30724. "71865": 71897,
  30725. "71866": 71898,
  30726. "71867": 71899,
  30727. "71868": 71900,
  30728. "71869": 71901,
  30729. "71870": 71902,
  30730. "71871": 71903,
  30731. "71872": 71840,
  30732. "71873": 71841,
  30733. "71874": 71842,
  30734. "71875": 71843,
  30735. "71876": 71844,
  30736. "71877": 71845,
  30737. "71878": 71846,
  30738. "71879": 71847,
  30739. "71880": 71848,
  30740. "71881": 71849,
  30741. "71882": 71850,
  30742. "71883": 71851,
  30743. "71884": 71852,
  30744. "71885": 71853,
  30745. "71886": 71854,
  30746. "71887": 71855,
  30747. "71888": 71856,
  30748. "71889": 71857,
  30749. "71890": 71858,
  30750. "71891": 71859,
  30751. "71892": 71860,
  30752. "71893": 71861,
  30753. "71894": 71862,
  30754. "71895": 71863,
  30755. "71896": 71864,
  30756. "71897": 71865,
  30757. "71898": 71866,
  30758. "71899": 71867,
  30759. "71900": 71868,
  30760. "71901": 71869,
  30761. "71902": 71870,
  30762. "71903": 71871
  30763. });
  30764. var regenerate = require('regenerate');
  30765. exports.REGULAR = {
  30766. 'd': regenerate().addRange(0x30, 0x39),
  30767. 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0xFFFF),
  30768. 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),
  30769. 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0xFFFF),
  30770. 'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),
  30771. 'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0xFFFF)
  30772. };
  30773. exports.UNICODE = {
  30774. 'd': regenerate().addRange(0x30, 0x39),
  30775. 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF),
  30776. 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),
  30777. 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF),
  30778. 'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),
  30779. 'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF)
  30780. };
  30781. exports.UNICODE_IGNORE_CASE = {
  30782. 'd': regenerate().addRange(0x30, 0x39),
  30783. 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF),
  30784. 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029),
  30785. 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF),
  30786. 'w': regenerate(0x5F, 0x17F, 0x212A).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A),
  30787. 'W': regenerate(0x4B, 0x53, 0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF)
  30788. };
  30789. modules['./data/character-class-escape-sets.js'] = {
  30790. REGULAR: exports.REGULAR,
  30791. UNICODE: exports.UNICODE,
  30792. UNICODE_IGNORE_CASE: exports.UNICODE_IGNORE_CASE
  30793. };
  30794. var generate = require('regjsgen').generate;
  30795. var parse = require('regjsparser').parse;
  30796. var regenerate = require('regenerate');
  30797. var iuMappings = require('./data/iu-mappings.json');
  30798. var ESCAPE_SETS = require('./data/character-class-escape-sets.js');
  30799. function getCharacterClassEscapeSet(character) {
  30800. if (unicode) {
  30801. if (ignoreCase) {
  30802. return ESCAPE_SETS.UNICODE_IGNORE_CASE[character];
  30803. }
  30804. return ESCAPE_SETS.UNICODE[character];
  30805. }
  30806. return ESCAPE_SETS.REGULAR[character];
  30807. }
  30808. var object = {};
  30809. var hasOwnProperty = object.hasOwnProperty;
  30810. function has(object, property) {
  30811. return hasOwnProperty.call(object, property);
  30812. }
  30813. var UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF);
  30814. var BMP_SET = regenerate().addRange(0x0, 0xFFFF);
  30815. var DOT_SET_UNICODE = UNICODE_SET.clone().remove(0x000A, 0x000D, 0x2028, 0x2029);
  30816. var DOT_SET = DOT_SET_UNICODE.clone().intersection(BMP_SET);
  30817. regenerate.prototype.iuAddRange = function(min, max) {
  30818. var $this = this;
  30819. do {
  30820. var folded = caseFold(min);
  30821. if (folded) {
  30822. $this.add(folded);
  30823. }
  30824. } while (++min <= max);
  30825. return $this;
  30826. };
  30827. function assign(target, source) {
  30828. for (var key in source) {
  30829. target[key] = source[key];
  30830. }
  30831. }
  30832. function update(item, pattern) {
  30833. var tree = parse(pattern, '');
  30834. switch (tree.type) {
  30835. case 'characterClass':
  30836. case 'group':
  30837. case 'value':
  30838. break;
  30839. default:
  30840. tree = wrap(tree, pattern);
  30841. }
  30842. assign(item, tree);
  30843. }
  30844. function wrap(tree, pattern) {
  30845. return {
  30846. 'type': 'group',
  30847. 'behavior': 'ignore',
  30848. 'body': [tree],
  30849. 'raw': '(?:' + pattern + ')'
  30850. };
  30851. }
  30852. function caseFold(codePoint) {
  30853. return has(iuMappings, codePoint) ? iuMappings[codePoint] : false;
  30854. }
  30855. var ignoreCase = false;
  30856. var unicode = false;
  30857. function processCharacterClass(characterClassItem) {
  30858. var set = regenerate();
  30859. var body = characterClassItem.body.forEach(function(item) {
  30860. switch (item.type) {
  30861. case 'value':
  30862. set.add(item.codePoint);
  30863. if (ignoreCase && unicode) {
  30864. var folded = caseFold(item.codePoint);
  30865. if (folded) {
  30866. set.add(folded);
  30867. }
  30868. }
  30869. break;
  30870. case 'characterClassRange':
  30871. var min = item.min.codePoint;
  30872. var max = item.max.codePoint;
  30873. set.addRange(min, max);
  30874. if (ignoreCase && unicode) {
  30875. set.iuAddRange(min, max);
  30876. }
  30877. break;
  30878. case 'characterClassEscape':
  30879. set.add(getCharacterClassEscapeSet(item.value));
  30880. break;
  30881. default:
  30882. throw Error('Unknown term type: ' + item.type);
  30883. }
  30884. });
  30885. if (characterClassItem.negative) {
  30886. set = (unicode ? UNICODE_SET : BMP_SET).clone().remove(set);
  30887. }
  30888. update(characterClassItem, set.toString());
  30889. return characterClassItem;
  30890. }
  30891. function processTerm(item) {
  30892. switch (item.type) {
  30893. case 'dot':
  30894. update(item, (unicode ? DOT_SET_UNICODE : DOT_SET).toString());
  30895. break;
  30896. case 'characterClass':
  30897. item = processCharacterClass(item);
  30898. break;
  30899. case 'characterClassEscape':
  30900. update(item, getCharacterClassEscapeSet(item.value).toString());
  30901. break;
  30902. case 'alternative':
  30903. case 'disjunction':
  30904. case 'group':
  30905. case 'quantifier':
  30906. item.body = item.body.map(processTerm);
  30907. break;
  30908. case 'value':
  30909. var codePoint = item.codePoint;
  30910. var set = regenerate(codePoint);
  30911. if (ignoreCase && unicode) {
  30912. var folded = caseFold(codePoint);
  30913. if (folded) {
  30914. set.add(folded);
  30915. }
  30916. }
  30917. update(item, set.toString());
  30918. break;
  30919. case 'anchor':
  30920. case 'empty':
  30921. case 'group':
  30922. case 'reference':
  30923. break;
  30924. default:
  30925. throw Error('Unknown term type: ' + item.type);
  30926. }
  30927. return item;
  30928. }
  30929. ;
  30930. module.exports = function(pattern, flags) {
  30931. var tree = parse(pattern, flags);
  30932. ignoreCase = flags ? flags.indexOf('i') > -1 : false;
  30933. unicode = flags ? flags.indexOf('u') > -1 : false;
  30934. assign(tree, processTerm(tree));
  30935. return generate(tree);
  30936. };
  30937. var regexpuRewritePattern = module.exports;
  30938. return {get regexpuRewritePattern() {
  30939. return regexpuRewritePattern;
  30940. }};
  30941. });
  30942. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js", [], function() {
  30943. "use strict";
  30944. var __moduleName = "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js";
  30945. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).ParseTreeTransformer;
  30946. var LiteralExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).LiteralExpression;
  30947. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).LiteralToken;
  30948. var REGULAR_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).REGULAR_EXPRESSION;
  30949. var regexpuRewritePattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../outputgeneration/regexpuRewritePattern.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).regexpuRewritePattern;
  30950. var RegularExpressionTransformer = function($__super) {
  30951. function RegularExpressionTransformer() {
  30952. $traceurRuntime.superConstructor(RegularExpressionTransformer).apply(this, arguments);
  30953. }
  30954. return ($traceurRuntime.createClass)(RegularExpressionTransformer, {transformLiteralExpression: function(tree) {
  30955. var token = tree.literalToken;
  30956. if (token.type === REGULAR_EXPRESSION) {
  30957. var value = token.value;
  30958. var lastIndex = value.lastIndexOf('/');
  30959. var pattern = value.slice(1, lastIndex);
  30960. var flags = value.slice(lastIndex + 1);
  30961. if (flags.indexOf('u') !== -1) {
  30962. var result = '/' + regexpuRewritePattern(pattern, flags) + '/' + flags.replace('u', '');
  30963. return new LiteralExpression(tree.location, new LiteralToken(REGULAR_EXPRESSION, result, token.location));
  30964. }
  30965. }
  30966. return tree;
  30967. }}, {}, $__super);
  30968. }(ParseTreeTransformer);
  30969. return {get RegularExpressionTransformer() {
  30970. return RegularExpressionTransformer;
  30971. }};
  30972. });
  30973. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RestParameterTransformer.js", [], function() {
  30974. "use strict";
  30975. var __moduleName = "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js";
  30976. var FormalParameterList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).FormalParameterList;
  30977. var ParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParameterTransformer.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).ParameterTransformer;
  30978. var createIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).createIdentifierToken;
  30979. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).parseStatement;
  30980. function hasRestParameter(parameterList) {
  30981. var parameters = parameterList.parameters;
  30982. return parameters.length > 0 && parameters[parameters.length - 1].isRestParameter();
  30983. }
  30984. function getRestParameterLiteralToken(parameterList) {
  30985. var parameters = parameterList.parameters;
  30986. return parameters[parameters.length - 1].parameter.identifier.identifierToken;
  30987. }
  30988. var RestParameterTransformer = function($__super) {
  30989. function RestParameterTransformer() {
  30990. $traceurRuntime.superConstructor(RestParameterTransformer).apply(this, arguments);
  30991. }
  30992. return ($traceurRuntime.createClass)(RestParameterTransformer, {transformFormalParameterList: function(tree) {
  30993. var transformed = $traceurRuntime.superGet(this, RestParameterTransformer.prototype, "transformFormalParameterList").call(this, tree);
  30994. if (hasRestParameter(transformed)) {
  30995. var parametersWithoutRestParam = new FormalParameterList(transformed.location, transformed.parameters.slice(0, -1));
  30996. var startIndex = transformed.parameters.length - 1;
  30997. var i = createIdentifierToken(this.getTempIdentifier());
  30998. var name = getRestParameterLiteralToken(transformed);
  30999. var loop;
  31000. if (startIndex) {
  31001. loop = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", " = [], ", " = ", ";\n ", " < arguments.length; ", "++)\n ", "[", " - ", "] = arguments[", "];"]), name, i, startIndex, i, i, name, i, startIndex, i);
  31002. } else {
  31003. loop = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", " = [], ", " = 0;\n ", " < arguments.length; ", "++)\n ", "[", "] = arguments[", "];"]), name, i, i, i, name, i, i);
  31004. }
  31005. this.parameterStatements.push(loop);
  31006. return parametersWithoutRestParam;
  31007. }
  31008. return transformed;
  31009. }}, {}, $__super);
  31010. }(ParameterTransformer);
  31011. return {get RestParameterTransformer() {
  31012. return RestParameterTransformer;
  31013. }};
  31014. });
  31015. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SpreadTransformer.js", [], function() {
  31016. "use strict";
  31017. var __moduleName = "traceur@0.0.112/src/codegeneration/SpreadTransformer.js";
  31018. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")),
  31019. APPLY = $__3.APPLY,
  31020. BIND = $__3.BIND,
  31021. FUNCTION = $__3.FUNCTION,
  31022. PROTOTYPE = $__3.PROTOTYPE;
  31023. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")),
  31024. MEMBER_EXPRESSION = $__4.MEMBER_EXPRESSION,
  31025. MEMBER_LOOKUP_EXPRESSION = $__4.MEMBER_LOOKUP_EXPRESSION,
  31026. SPREAD_EXPRESSION = $__4.SPREAD_EXPRESSION;
  31027. var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).Script;
  31028. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).TempVarTransformer;
  31029. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).default;
  31030. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")),
  31031. createArgumentList = $__8.createArgumentList,
  31032. createArrayLiteral = $__8.createArrayLiteral,
  31033. createAssignmentExpression = $__8.createAssignmentExpression,
  31034. createCallExpression = $__8.createCallExpression,
  31035. createEmptyArgumentList = $__8.createEmptyArgumentList,
  31036. createIdentifierExpression = $__8.createIdentifierExpression,
  31037. createMemberExpression = $__8.createMemberExpression,
  31038. createMemberLookupExpression = $__8.createMemberLookupExpression,
  31039. createNewExpression = $__8.createNewExpression,
  31040. createNullLiteral = $__8.createNullLiteral,
  31041. createParenExpression = $__8.createParenExpression,
  31042. createVoid0 = $__8.createVoid0;
  31043. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")),
  31044. parseExpression = $__9.parseExpression,
  31045. parseStatement = $__9.parseStatement;
  31046. var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).prependStatements;
  31047. function hasSpreadMember(trees) {
  31048. return trees.some(function(tree) {
  31049. return tree && tree.type === SPREAD_EXPRESSION;
  31050. });
  31051. }
  31052. var SpreadTransformer = function($__super) {
  31053. function SpreadTransformer() {
  31054. $traceurRuntime.superConstructor(SpreadTransformer).apply(this, arguments);
  31055. }
  31056. return ($traceurRuntime.createClass)(SpreadTransformer, {
  31057. createArrayFromElements_: function(elements) {
  31058. var length = elements.length;
  31059. var args = [];
  31060. var lastArray;
  31061. for (var i = 0; i < length; i++) {
  31062. if (elements[i] && elements[i].type === SPREAD_EXPRESSION) {
  31063. if (lastArray) {
  31064. args.push(createArrayLiteral(lastArray));
  31065. lastArray = null;
  31066. }
  31067. args.push(this.transformAny(elements[i].expression));
  31068. } else {
  31069. if (!lastArray)
  31070. lastArray = [];
  31071. lastArray.push(this.transformAny(elements[i]));
  31072. }
  31073. }
  31074. if (lastArray)
  31075. args.push(createArrayLiteral(lastArray));
  31076. var spread = this.getRuntimeExpression('spread');
  31077. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), spread, createArgumentList(args));
  31078. },
  31079. desugarCallSpread_: function(tree) {
  31080. var operand = this.transformAny(tree.operand);
  31081. var functionObject,
  31082. contextObject;
  31083. this.pushTempScope();
  31084. if (operand.type === MEMBER_EXPRESSION) {
  31085. var tempIdent = createIdentifierExpression(this.addTempVar());
  31086. var parenExpression = createParenExpression(createAssignmentExpression(tempIdent, operand.operand));
  31087. var memberName = operand.memberName;
  31088. contextObject = tempIdent;
  31089. functionObject = createMemberExpression(parenExpression, memberName);
  31090. } else if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION) {
  31091. var tempIdent$__1 = createIdentifierExpression(this.addTempVar());
  31092. var parenExpression$__2 = createParenExpression(createAssignmentExpression(tempIdent$__1, operand.operand));
  31093. var memberExpression = this.transformAny(operand.memberExpression);
  31094. contextObject = tempIdent$__1;
  31095. functionObject = createMemberLookupExpression(parenExpression$__2, memberExpression);
  31096. } else {
  31097. contextObject = createVoid0();
  31098. functionObject = operand;
  31099. }
  31100. this.popTempScope();
  31101. var arrayExpression = this.createArrayFromElements_(tree.args.args);
  31102. return createCallExpression(createMemberExpression(functionObject, APPLY), createArgumentList([contextObject, arrayExpression]));
  31103. },
  31104. desugarNewSpread_: function(tree) {
  31105. var arrayExpression = $traceurRuntime.spread([createNullLiteral()], tree.args.args);
  31106. arrayExpression = this.createArrayFromElements_(arrayExpression);
  31107. return createNewExpression(createParenExpression(createCallExpression(createMemberExpression(FUNCTION, PROTOTYPE, BIND, APPLY), createArgumentList([this.transformAny(tree.operand), arrayExpression]))), createEmptyArgumentList());
  31108. },
  31109. transformArrayLiteral: function(tree) {
  31110. if (hasSpreadMember(tree.elements)) {
  31111. return this.createArrayFromElements_(tree.elements);
  31112. }
  31113. return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformArrayLiteral").call(this, tree);
  31114. },
  31115. transformCallExpression: function(tree) {
  31116. if (hasSpreadMember(tree.args.args)) {
  31117. return this.desugarCallSpread_(tree);
  31118. }
  31119. return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformCallExpression").call(this, tree);
  31120. },
  31121. transformNewExpression: function(tree) {
  31122. if (tree.args !== null && hasSpreadMember(tree.args.args)) {
  31123. return this.desugarNewSpread_(tree);
  31124. }
  31125. return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformNewExpression").call(this, tree);
  31126. }
  31127. }, {}, $__super);
  31128. }(ImportRuntimeTrait(TempVarTransformer));
  31129. return {get SpreadTransformer() {
  31130. return SpreadTransformer;
  31131. }};
  31132. });
  31133. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SuperTransformer.js", [], function() {
  31134. "use strict";
  31135. var __moduleName = "traceur@0.0.112/src/codegeneration/SuperTransformer.js";
  31136. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).default;
  31137. var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).TempVarTransformer;
  31138. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")),
  31139. ArgumentList = $__7.ArgumentList,
  31140. ClassDeclaration = $__7.ClassDeclaration,
  31141. ClassExpression = $__7.ClassExpression,
  31142. GetAccessor = $__7.GetAccessor,
  31143. MemberExpression = $__7.MemberExpression,
  31144. Method = $__7.Method,
  31145. SetAccessor = $__7.SetAccessor;
  31146. var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")),
  31147. MEMBER_EXPRESSION = $__8.MEMBER_EXPRESSION,
  31148. MEMBER_LOOKUP_EXPRESSION = $__8.MEMBER_LOOKUP_EXPRESSION,
  31149. SUPER_EXPRESSION = $__8.SUPER_EXPRESSION;
  31150. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")),
  31151. EQUAL = $__9.EQUAL,
  31152. MINUS_MINUS = $__9.MINUS_MINUS,
  31153. PLUS_PLUS = $__9.PLUS_PLUS;
  31154. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")),
  31155. createAssignmentExpression = $__10.createAssignmentExpression,
  31156. createBindingIdentifier = $__10.createBindingIdentifier,
  31157. createIdentifierExpression = $__10.createIdentifierExpression,
  31158. createIdentifierToken = $__10.createIdentifierToken,
  31159. createParenExpression = $__10.createParenExpression,
  31160. createStringLiteral = $__10.createStringLiteral,
  31161. createThisExpression = $__10.createThisExpression;
  31162. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).parseExpression;
  31163. var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).ExplodeExpressionTransformer;
  31164. function hasSuperMemberExpression(tree) {
  31165. return (tree.type === MEMBER_EXPRESSION || tree.type === MEMBER_LOOKUP_EXPRESSION) && tree.operand.type === SUPER_EXPRESSION;
  31166. }
  31167. var State = function() {
  31168. function State(transformer, home) {
  31169. this.transformer = transformer;
  31170. this.home_ = home;
  31171. this.tempName = home ? null : transformer.getTempIdentifier();
  31172. this.hasSuper = false;
  31173. }
  31174. return ($traceurRuntime.createClass)(State, {get home() {
  31175. this.hasSuper = true;
  31176. if (this.home_ === null) {
  31177. this.home_ = createIdentifierExpression(createIdentifierToken(this.tempName));
  31178. }
  31179. return this.home_;
  31180. }}, {});
  31181. }();
  31182. var ClassState = function($__super) {
  31183. function ClassState(transformer, tree) {
  31184. var home = null;
  31185. if (tree.name !== null) {
  31186. home = createIdentifierExpression(tree.name.identifierToken);
  31187. }
  31188. $traceurRuntime.superConstructor(ClassState).call(this, transformer, home);
  31189. this.name_ = tree.name;
  31190. }
  31191. return ($traceurRuntime.createClass)(ClassState, {get name() {
  31192. if (this.name_ !== null)
  31193. return this.name_;
  31194. if (this.hasSuper) {
  31195. return createBindingIdentifier(this.home.identifierToken);
  31196. }
  31197. return null;
  31198. }}, {}, $__super);
  31199. }(State);
  31200. var PrototypeState = function($__super) {
  31201. function PrototypeState(transformer, classState) {
  31202. $traceurRuntime.superConstructor(PrototypeState).call(this, transformer, null);
  31203. this.classState = classState;
  31204. }
  31205. return ($traceurRuntime.createClass)(PrototypeState, {get home() {
  31206. var ident = this.classState.home;
  31207. return new MemberExpression(null, ident, createIdentifierToken('prototype'));
  31208. }}, {}, $__super);
  31209. }(State);
  31210. var SuperTransformer = function($__super) {
  31211. function SuperTransformer(identifierGenerator, reporter, options) {
  31212. $traceurRuntime.superConstructor(SuperTransformer).call(this, identifierGenerator, reporter, options);
  31213. this.stateStack_ = [];
  31214. }
  31215. return ($traceurRuntime.createClass)(SuperTransformer, {
  31216. pushState: function(state) {
  31217. this.stateStack_.push(state);
  31218. },
  31219. popState: function() {
  31220. return this.stateStack_.pop();
  31221. },
  31222. peekState: function() {
  31223. return this.stateStack_[this.stateStack_.length - 1];
  31224. },
  31225. transformObjectLiteral: function(tree) {
  31226. var state = new State(this, null);
  31227. this.pushState(state);
  31228. this.pushState(state);
  31229. var result = $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformObjectLiteral").call(this, tree);
  31230. this.popState();
  31231. this.popState();
  31232. if (state.hasSuper) {
  31233. this.registerTempVarName(state.tempName);
  31234. return createAssignmentExpression(state.home, result);
  31235. }
  31236. this.releaseTempName(state.tempName);
  31237. return result;
  31238. },
  31239. transformClassExpression: function(tree) {
  31240. var superClass = this.transformAny(tree.superClass);
  31241. var annotations = this.transformList(tree.annotations);
  31242. var classState = new ClassState(this, tree);
  31243. var prototypeState = new PrototypeState(this, classState);
  31244. this.pushState(classState);
  31245. this.pushState(prototypeState);
  31246. var elements = this.transformList(tree.elements);
  31247. this.popState();
  31248. this.popState();
  31249. if (tree.name === null && tree.superClass !== null) {
  31250. classState.home;
  31251. } else if (tree.superClass === superClass && tree.elements === elements && tree.annotations === annotations) {
  31252. return tree;
  31253. }
  31254. return new ClassExpression(tree.location, classState.name, superClass, elements, tree.annotations, tree.typeParameters);
  31255. },
  31256. transformClassDeclaration: function(tree) {
  31257. var superClass = this.transformAny(tree.superClass);
  31258. var annotations = this.transformList(tree.annotations);
  31259. var classState = new ClassState(this, tree);
  31260. var prototypeState = new PrototypeState(this, classState);
  31261. this.pushState(classState);
  31262. this.pushState(prototypeState);
  31263. var elements = this.transformList(tree.elements);
  31264. this.popState();
  31265. this.popState();
  31266. if (tree.superClass === superClass && tree.elements === elements && tree.annotations === annotations) {
  31267. return tree;
  31268. }
  31269. return new ClassDeclaration(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters);
  31270. },
  31271. transformMethod: function(tree) {
  31272. var name = this.transformAny(tree.name);
  31273. var prototypeState;
  31274. if (tree.isStatic) {
  31275. prototypeState = this.popState();
  31276. }
  31277. var parameterList = this.transformAny(tree.parameterList);
  31278. var body = this.transformAny(tree.body);
  31279. if (tree.isStatic) {
  31280. this.pushState(prototypeState);
  31281. }
  31282. if (tree.name === name && tree.parameterList === parameterList && tree.body === body) {
  31283. return tree;
  31284. }
  31285. return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, tree.typeAnnotation, tree.annotations, body, tree.debugName);
  31286. },
  31287. transformGetAccessor: function(tree) {
  31288. var name = this.transformAny(tree.name);
  31289. var prototypeState;
  31290. if (tree.isStatic) {
  31291. prototypeState = this.popState();
  31292. }
  31293. var body = this.transformAny(tree.body);
  31294. if (tree.isStatic) {
  31295. this.pushState(prototypeState);
  31296. }
  31297. if (tree.name === name && tree.body === body) {
  31298. return tree;
  31299. }
  31300. return new GetAccessor(tree.location, tree.isStatic, name, tree.typeAnnotation, tree.annotations, body);
  31301. },
  31302. transformSetAccessor: function(tree) {
  31303. var name = this.transformAny(tree.name);
  31304. var prototypeState;
  31305. if (tree.isStatic) {
  31306. prototypeState = this.popState();
  31307. }
  31308. var parameterList = this.transformAny(tree.parameterList);
  31309. var body = this.transformAny(tree.body);
  31310. if (tree.isStatic) {
  31311. this.pushState(prototypeState);
  31312. }
  31313. if (tree.name === name && tree.parameterList === parameterList && tree.body === body) {
  31314. return tree;
  31315. }
  31316. return new SetAccessor(tree.location, tree.isStatic, name, parameterList, tree.annotations, body);
  31317. },
  31318. transformComputedPropertyName: function(tree) {
  31319. var s1 = this.popState();
  31320. var s2 = this.popState();
  31321. var result = $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformComputedPropertyName").call(this, tree);
  31322. this.pushState(s2);
  31323. this.pushState(s1);
  31324. return result;
  31325. },
  31326. transformSuperExpression: function(tree) {
  31327. throw new Error('unreachable');
  31328. },
  31329. transformMemberShared_: function(name) {
  31330. var home = this.peekState().home;
  31331. var superGet = this.getRuntimeExpression('superGet');
  31332. return parseExpression($traceurRuntime.getTemplateObject(["", "(this, ", ", ", ")"]), superGet, home, name);
  31333. },
  31334. transformMemberExpression: function(tree) {
  31335. if (tree.operand.type === SUPER_EXPRESSION) {
  31336. return this.transformMemberShared_(tree.memberName.value);
  31337. }
  31338. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformMemberExpression").call(this, tree);
  31339. },
  31340. transformMemberLookupExpression: function(tree) {
  31341. if (tree.operand.type === SUPER_EXPRESSION)
  31342. return this.transformMemberShared_(tree.memberExpression);
  31343. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformMemberLookupExpression").call(this, tree);
  31344. },
  31345. transformCallExpression: function(tree) {
  31346. var operand,
  31347. args;
  31348. if (tree.operand.type === SUPER_EXPRESSION) {
  31349. args = this.transformAny(tree.args);
  31350. args = new ArgumentList(tree.location, $traceurRuntime.spread([createThisExpression()], args.args));
  31351. var home = this.stateStack_[this.stateStack_.length - 2].home;
  31352. var superConstructor = this.getRuntimeExpression('superConstructor');
  31353. operand = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), superConstructor, home);
  31354. } else if (hasSuperMemberExpression(tree.operand)) {
  31355. operand = this.transformAny(tree.operand);
  31356. args = this.transformAny(tree.args);
  31357. args = new ArgumentList(args.location, $traceurRuntime.spread([createThisExpression()], args.args));
  31358. } else {
  31359. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformCallExpression").call(this, tree);
  31360. }
  31361. return parseExpression($traceurRuntime.getTemplateObject(["", ".call(", ")"]), operand, args);
  31362. },
  31363. transformBinaryExpression: function(tree) {
  31364. if (tree.operator.isAssignmentOperator() && hasSuperMemberExpression(tree.left)) {
  31365. if (tree.operator.type !== EQUAL) {
  31366. var exploded = new ExplodeExpressionTransformer(this).transformAny(tree);
  31367. return this.transformAny(createParenExpression(exploded));
  31368. }
  31369. var name = tree.left.type === MEMBER_LOOKUP_EXPRESSION ? tree.left.memberExpression : createStringLiteral(tree.left.memberName.value);
  31370. var right = this.transformAny(tree.right);
  31371. var home = this.peekState().home;
  31372. var superSet = this.getRuntimeExpression('superSet');
  31373. return parseExpression($traceurRuntime.getTemplateObject(["", "(this, ", ", ", ", ", ")"]), superSet, home, name, right);
  31374. }
  31375. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformBinaryExpression").call(this, tree);
  31376. },
  31377. transformUnaryExpression: function(tree) {
  31378. var transformed = this.transformIncrementDecrement_(tree);
  31379. if (transformed)
  31380. return transformed;
  31381. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformUnaryExpression").call(this, tree);
  31382. },
  31383. transformPostfixExpression: function(tree) {
  31384. var transformed = this.transformIncrementDecrement_(tree);
  31385. if (transformed)
  31386. return transformed;
  31387. return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformPostfixExpression").call(this, tree);
  31388. },
  31389. transformIncrementDecrement_: function(tree) {
  31390. var operator = tree.operator;
  31391. var operand = tree.operand;
  31392. if ((operator.type === PLUS_PLUS || operator.type === MINUS_MINUS) && hasSuperMemberExpression(operand)) {
  31393. var exploded = new ExplodeExpressionTransformer(this).transformAny(tree);
  31394. if (exploded !== tree)
  31395. exploded = createParenExpression(exploded);
  31396. return this.transformAny(exploded);
  31397. }
  31398. return null;
  31399. }
  31400. }, {}, $__super);
  31401. }(ImportRuntimeTrait(TempVarTransformer));
  31402. return {get SuperTransformer() {
  31403. return SuperTransformer;
  31404. }};
  31405. });
  31406. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SymbolTransformer.js", [], function() {
  31407. "use strict";
  31408. var __moduleName = "traceur@0.0.112/src/codegeneration/SymbolTransformer.js";
  31409. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")),
  31410. BinaryExpression = $__3.BinaryExpression,
  31411. UnaryExpression = $__3.UnaryExpression;
  31412. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")),
  31413. IDENTIFIER_EXPRESSION = $__4.IDENTIFIER_EXPRESSION,
  31414. LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION,
  31415. UNARY_EXPRESSION = $__4.UNARY_EXPRESSION;
  31416. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).ParseTreeTransformer;
  31417. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).default;
  31418. var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")),
  31419. EQUAL_EQUAL = $__7.EQUAL_EQUAL,
  31420. EQUAL_EQUAL_EQUAL = $__7.EQUAL_EQUAL_EQUAL,
  31421. NOT_EQUAL = $__7.NOT_EQUAL,
  31422. NOT_EQUAL_EQUAL = $__7.NOT_EQUAL_EQUAL,
  31423. TYPEOF = $__7.TYPEOF;
  31424. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).parseExpression;
  31425. function isEqualityExpression(tree) {
  31426. switch (tree.operator.type) {
  31427. case EQUAL_EQUAL:
  31428. case EQUAL_EQUAL_EQUAL:
  31429. case NOT_EQUAL:
  31430. case NOT_EQUAL_EQUAL:
  31431. return true;
  31432. }
  31433. return false;
  31434. }
  31435. function isTypeof(tree) {
  31436. return tree.type === UNARY_EXPRESSION && tree.operator.type === TYPEOF;
  31437. }
  31438. function isSafeTypeofString(tree) {
  31439. if (tree.type !== LITERAL_EXPRESSION)
  31440. return false;
  31441. var value = tree.literalToken.processedValue;
  31442. switch (value) {
  31443. case 'symbol':
  31444. case 'object':
  31445. return false;
  31446. }
  31447. return true;
  31448. }
  31449. var SymbolTransformer = function($__super) {
  31450. function SymbolTransformer(identifierGenerator, reporter, options) {
  31451. $traceurRuntime.superConstructor(SymbolTransformer).call(this);
  31452. this.identifierGenerator = identifierGenerator;
  31453. this.reporter = reporter;
  31454. this.options = options;
  31455. }
  31456. return ($traceurRuntime.createClass)(SymbolTransformer, {
  31457. transformTypeofOperand_: function(tree) {
  31458. var operand = this.transformAny(tree.operand);
  31459. return new UnaryExpression(tree.location, tree.operator, operand);
  31460. },
  31461. transformBinaryExpression: function(tree) {
  31462. if (isEqualityExpression(tree)) {
  31463. if (isTypeof(tree.left) && isSafeTypeofString(tree.right)) {
  31464. var left = this.transformTypeofOperand_(tree.left);
  31465. var right = tree.right;
  31466. return new BinaryExpression(tree.location, left, tree.operator, right);
  31467. }
  31468. if (isTypeof(tree.right) && isSafeTypeofString(tree.left)) {
  31469. var left$__1 = tree.left;
  31470. var right$__2 = this.transformTypeofOperand_(tree.right);
  31471. return new BinaryExpression(tree.location, left$__1, tree.operator, right$__2);
  31472. }
  31473. }
  31474. return $traceurRuntime.superGet(this, SymbolTransformer.prototype, "transformBinaryExpression").call(this, tree);
  31475. },
  31476. transformUnaryExpression: function(tree) {
  31477. if (tree.operator.type !== TYPEOF)
  31478. return $traceurRuntime.superGet(this, SymbolTransformer.prototype, "transformUnaryExpression").call(this, tree);
  31479. var operand = this.transformAny(tree.operand);
  31480. var expression = this.getRuntimeTypeof(operand);
  31481. if (operand.type === IDENTIFIER_EXPRESSION) {
  31482. return parseExpression($traceurRuntime.getTemplateObject(["(typeof ", " === 'undefined' ?\n 'undefined' : ", ")"]), operand, expression);
  31483. }
  31484. return expression;
  31485. },
  31486. getRuntimeTypeof: function(operand) {
  31487. var typeOf = this.getRuntimeExpression('typeof');
  31488. return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), typeOf, operand);
  31489. }
  31490. }, {}, $__super);
  31491. }(ImportRuntimeTrait(ParseTreeTransformer));
  31492. return {get SymbolTransformer() {
  31493. return SymbolTransformer;
  31494. }};
  31495. });
  31496. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js", [], function() {
  31497. "use strict";
  31498. var __moduleName = "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js";
  31499. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")),
  31500. BINARY_EXPRESSION = $__3.BINARY_EXPRESSION,
  31501. COMMA_EXPRESSION = $__3.COMMA_EXPRESSION,
  31502. CONDITIONAL_EXPRESSION = $__3.CONDITIONAL_EXPRESSION,
  31503. TEMPLATE_LITERAL_PORTION = $__3.TEMPLATE_LITERAL_PORTION,
  31504. TEMPLATE_LITERAL_EXPRESSION = $__3.TEMPLATE_LITERAL_EXPRESSION;
  31505. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")),
  31506. LiteralExpression = $__4.LiteralExpression,
  31507. NewExpression = $__4.NewExpression;
  31508. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).LiteralToken;
  31509. var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).ParenTrait;
  31510. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).ParseTreeTransformer;
  31511. var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).default;
  31512. var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")),
  31513. PERCENT = $__9.PERCENT,
  31514. PLUS = $__9.PLUS,
  31515. SLASH = $__9.SLASH,
  31516. STAR = $__9.STAR,
  31517. STRING = $__9.STRING;
  31518. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")),
  31519. createArgumentList = $__10.createArgumentList,
  31520. createArrayLiteral = $__10.createArrayLiteral,
  31521. createBinaryExpression = $__10.createBinaryExpression,
  31522. createCallExpression = $__10.createCallExpression,
  31523. createMemberExpression = $__10.createMemberExpression,
  31524. createOperatorToken = $__10.createOperatorToken,
  31525. createParenExpression = $__10.createParenExpression;
  31526. function createStringLiteralExpression(loc, str) {
  31527. return new LiteralExpression(loc, new LiteralToken(STRING, str, loc));
  31528. }
  31529. function createGetTemplateObject(elements, getTemplateObject) {
  31530. var cooked = [];
  31531. var raw = [];
  31532. var same = true;
  31533. for (var i = 0; i < elements.length; i += 2) {
  31534. var loc = elements[i].location;
  31535. var str = elements[i].value.value;
  31536. var cookedStr = toCookedString(str);
  31537. var rawStr = toRawString(str);
  31538. var cookedLiteral$__1 = createStringLiteralExpression(loc, cookedStr);
  31539. cooked.push(cookedLiteral$__1);
  31540. if (cookedStr !== rawStr) {
  31541. same = false;
  31542. var rawLiteral = createStringLiteralExpression(loc, rawStr);
  31543. raw.push(rawLiteral);
  31544. } else {
  31545. raw.push(cookedLiteral$__1);
  31546. }
  31547. }
  31548. maybeAddEmptyStringAtEnd(elements, cooked);
  31549. var cookedLiteral = createArrayLiteral(cooked);
  31550. var args = [cookedLiteral];
  31551. if (!same) {
  31552. maybeAddEmptyStringAtEnd(elements, raw);
  31553. var rawLiteral$__2 = createArrayLiteral(raw);
  31554. args.unshift(rawLiteral$__2);
  31555. }
  31556. return createCallExpression(getTemplateObject, createArgumentList(args));
  31557. }
  31558. function maybeAddEmptyStringAtEnd(elements, items) {
  31559. var length = elements.length;
  31560. if (!length || elements[length - 1].type !== TEMPLATE_LITERAL_PORTION) {
  31561. items.push(createStringLiteralExpression(null, '""'));
  31562. }
  31563. }
  31564. function toRawString(str) {
  31565. str = str.replace(/\r\n?/g, '\n');
  31566. str = JSON.stringify(str);
  31567. return str.replace(/\u2028|\u2029/g, function(c) {
  31568. switch (c) {
  31569. case '\u2028':
  31570. return '\\u2028';
  31571. case '\u2029':
  31572. return '\\u2029';
  31573. default:
  31574. throw Error('Not reachable');
  31575. }
  31576. });
  31577. }
  31578. function toCookedString(s) {
  31579. var sb = ['"'];
  31580. var i = 0,
  31581. k = 1,
  31582. c,
  31583. c2;
  31584. while (i < s.length) {
  31585. c = s[i++];
  31586. switch (c) {
  31587. case '\\':
  31588. c2 = s[i++];
  31589. switch (c2) {
  31590. case '\n':
  31591. case '\u2028':
  31592. case '\u2029':
  31593. break;
  31594. case '\r':
  31595. if (s[i + 1] === '\n') {
  31596. i++;
  31597. }
  31598. break;
  31599. default:
  31600. sb[k++] = c;
  31601. sb[k++] = c2;
  31602. }
  31603. break;
  31604. case '"':
  31605. sb[k++] = '\\"';
  31606. break;
  31607. case '\n':
  31608. sb[k++] = '\\n';
  31609. break;
  31610. case '\r':
  31611. if (s[i] === '\n')
  31612. i++;
  31613. sb[k++] = '\\n';
  31614. break;
  31615. case '\t':
  31616. sb[k++] = '\\t';
  31617. break;
  31618. case '\f':
  31619. sb[k++] = '\\f';
  31620. break;
  31621. case '\b':
  31622. sb[k++] = '\\b';
  31623. break;
  31624. case '\u2028':
  31625. sb[k++] = '\\u2028';
  31626. break;
  31627. case '\u2029':
  31628. sb[k++] = '\\u2029';
  31629. break;
  31630. default:
  31631. sb[k++] = c;
  31632. }
  31633. }
  31634. sb[k++] = '"';
  31635. return sb.join('');
  31636. }
  31637. var TemplateLiteralTransformer = function($__super) {
  31638. function TemplateLiteralTransformer(identifierGenerator, reporter, options) {
  31639. $traceurRuntime.superConstructor(TemplateLiteralTransformer).call(this);
  31640. this.options = options;
  31641. }
  31642. return ($traceurRuntime.createClass)(TemplateLiteralTransformer, {
  31643. transformTemplateLiteralExpression: function(tree) {
  31644. if (!tree.operand) {
  31645. return this.createDefaultTemplateLiteral(tree);
  31646. }
  31647. var operand = this.transformAny(tree.operand);
  31648. var elements = tree.elements;
  31649. var getTemplateObject = this.getRuntimeExpression('getTemplateObject');
  31650. var args = [createGetTemplateObject(tree.elements, getTemplateObject)];
  31651. for (var i = 1; i < elements.length; i += 2) {
  31652. args.push(this.transformAny(elements[i]));
  31653. }
  31654. return createCallExpression(operand, createArgumentList(args));
  31655. },
  31656. transformTemplateSubstitution: function(tree) {
  31657. var transformedTree = this.transformAny(tree.expression);
  31658. switch (transformedTree.type) {
  31659. case BINARY_EXPRESSION:
  31660. switch (transformedTree.operator.type) {
  31661. case STAR:
  31662. case PERCENT:
  31663. case SLASH:
  31664. return transformedTree;
  31665. }
  31666. return createParenExpression(transformedTree);
  31667. case COMMA_EXPRESSION:
  31668. case CONDITIONAL_EXPRESSION:
  31669. return createParenExpression(transformedTree);
  31670. }
  31671. return transformedTree;
  31672. },
  31673. transformTemplateLiteralPortion: function(tree) {
  31674. var str = toCookedString(tree.value.value);
  31675. return createStringLiteralExpression(tree.location, str);
  31676. },
  31677. createDefaultTemplateLiteral: function(tree) {
  31678. var elements = tree.elements;
  31679. var length = elements.length;
  31680. if (length === 0) {
  31681. return createStringLiteralExpression(tree.location, '""');
  31682. }
  31683. var firstNonEmpty = elements[0].value.value === '';
  31684. var binaryExpression = this.transformAny(elements[0]);
  31685. if (length === 1)
  31686. return binaryExpression;
  31687. var plusToken = createOperatorToken(PLUS);
  31688. for (var i = 1; i < length; i++) {
  31689. var element = elements[i];
  31690. if (element.type === TEMPLATE_LITERAL_PORTION) {
  31691. if (element.value.value === '') {
  31692. continue;
  31693. }
  31694. if (firstNonEmpty && i === 2) {
  31695. binaryExpression = binaryExpression.right;
  31696. }
  31697. }
  31698. var transformedTree = this.transformAny(elements[i]);
  31699. binaryExpression = createBinaryExpression(binaryExpression, plusToken, transformedTree);
  31700. }
  31701. return new createParenExpression(binaryExpression);
  31702. }
  31703. }, {}, $__super);
  31704. }(ImportRuntimeTrait(ParenTrait(ParseTreeTransformer)));
  31705. return {get TemplateLiteralTransformer() {
  31706. return TemplateLiteralTransformer;
  31707. }};
  31708. });
  31709. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js", [], function() {
  31710. "use strict";
  31711. var __moduleName = "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js";
  31712. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")).ParseTreeTransformer;
  31713. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")),
  31714. ArgumentList = $__2.ArgumentList,
  31715. IdentifierExpression = $__2.IdentifierExpression,
  31716. MemberExpression = $__2.MemberExpression;
  31717. var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")).parseExpression;
  31718. var TypeToExpressionTransformer = function($__super) {
  31719. function TypeToExpressionTransformer() {
  31720. $traceurRuntime.superConstructor(TypeToExpressionTransformer).apply(this, arguments);
  31721. }
  31722. return ($traceurRuntime.createClass)(TypeToExpressionTransformer, {
  31723. transformTypeName: function(tree) {
  31724. if (tree.moduleName) {
  31725. var operand = this.transformAny(tree.moduleName);
  31726. return new MemberExpression(tree.location, operand, tree.name);
  31727. }
  31728. return new IdentifierExpression(tree.location, tree.name);
  31729. },
  31730. transformPredefinedType: function(tree) {
  31731. return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.type.", ")"]), tree.typeToken);
  31732. },
  31733. transformTypeReference: function(tree) {
  31734. var typeName = this.transformAny(tree.typeName);
  31735. var args = this.transformAny(tree.args);
  31736. var argumentList = new ArgumentList(tree.location, $traceurRuntime.spread([typeName], args));
  31737. return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.genericType(", ")"]), argumentList);
  31738. },
  31739. transformTypeArguments: function(tree) {
  31740. return this.transformList(tree.args);
  31741. }
  31742. }, {}, $__super);
  31743. }(ParseTreeTransformer);
  31744. return {get TypeToExpressionTransformer() {
  31745. return TypeToExpressionTransformer;
  31746. }};
  31747. });
  31748. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TypeTransformer.js", [], function() {
  31749. "use strict";
  31750. var __moduleName = "traceur@0.0.112/src/codegeneration/TypeTransformer.js";
  31751. var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")),
  31752. AnonBlock = $__1.AnonBlock,
  31753. FormalParameter = $__1.FormalParameter,
  31754. FunctionDeclaration = $__1.FunctionDeclaration,
  31755. FunctionExpression = $__1.FunctionExpression,
  31756. GetAccessor = $__1.GetAccessor,
  31757. Method = $__1.Method,
  31758. VariableDeclaration = $__1.VariableDeclaration;
  31759. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")),
  31760. IMPORT_TYPE_CLAUSE = $__2.IMPORT_TYPE_CLAUSE,
  31761. TYPE_ALIAS_DECLARATION = $__2.TYPE_ALIAS_DECLARATION;
  31762. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")).ParseTreeTransformer;
  31763. var TypeTransformer = function($__super) {
  31764. function TypeTransformer() {
  31765. $traceurRuntime.superConstructor(TypeTransformer).apply(this, arguments);
  31766. }
  31767. return ($traceurRuntime.createClass)(TypeTransformer, {
  31768. transformVariableDeclaration: function(tree) {
  31769. if (tree.typeAnnotation) {
  31770. tree = new VariableDeclaration(tree.location, tree.lvalue, null, tree.initializer);
  31771. }
  31772. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformVariableDeclaration").call(this, tree);
  31773. },
  31774. transformFormalParameter: function(tree) {
  31775. if (tree.typeAnnotation !== null)
  31776. return new FormalParameter(tree.location, tree.parameter, null, []);
  31777. return tree;
  31778. },
  31779. transformFunctionDeclaration: function(tree) {
  31780. if (tree.typeAnnotation) {
  31781. tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body);
  31782. }
  31783. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformFunctionDeclaration").call(this, tree);
  31784. },
  31785. transformFunctionExpression: function(tree) {
  31786. if (tree.typeAnnotation) {
  31787. tree = new FunctionExpression(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body);
  31788. }
  31789. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformFunctionExpression").call(this, tree);
  31790. },
  31791. transformMethod: function(tree) {
  31792. if (tree.typeAnnotation) {
  31793. tree = new Method(tree.location, tree.isStatic, tree.functionKind, tree.name, tree.parameterList, null, tree.annotations, tree.body, tree.debugName);
  31794. }
  31795. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformMethod").call(this, tree);
  31796. },
  31797. transformGetAccessor: function(tree) {
  31798. if (tree.typeAnnotation) {
  31799. tree = new GetAccessor(tree.location, tree.isStatic, tree.name, null, tree.annotations, tree.body);
  31800. }
  31801. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformGetAccessor").call(this, tree);
  31802. },
  31803. transformInterfaceDeclaration: function(tree) {
  31804. return new AnonBlock(null, []);
  31805. },
  31806. transformExportDeclaration: function(tree) {
  31807. if (tree.declaration.type === TYPE_ALIAS_DECLARATION) {
  31808. return new AnonBlock(null, []);
  31809. }
  31810. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformExportDeclaration").call(this, tree);
  31811. },
  31812. transformTypeAliasDeclaration: function(tree) {
  31813. return new AnonBlock(null, []);
  31814. },
  31815. transformImportDeclaration: function(tree) {
  31816. if (!tree.importClause || tree.importClause.type === IMPORT_TYPE_CLAUSE) {
  31817. return new AnonBlock(null, []);
  31818. }
  31819. return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformImportDeclaration").call(this, tree);
  31820. }
  31821. }, {}, $__super);
  31822. }(ParseTreeTransformer);
  31823. return {get TypeTransformer() {
  31824. return TypeTransformer;
  31825. }};
  31826. });
  31827. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js", [], function() {
  31828. "use strict";
  31829. var __moduleName = "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js";
  31830. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).ParseTreeTransformer;
  31831. var LiteralExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).LiteralExpression;
  31832. var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).LiteralToken;
  31833. var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).STRING;
  31834. var re = /(\\*)\\u{([0-9a-fA-F]+)}/g;
  31835. function zeroPad(value) {
  31836. return '0000'.slice(value.length) + value;
  31837. }
  31838. function needsTransform(token) {
  31839. return token.type === STRING && re.test(token.value);
  31840. }
  31841. function transformToken(token) {
  31842. return token.value.replace(re, function(match, backslashes, hexDigits) {
  31843. var backslashIsEscaped = backslashes.length % 2 === 1;
  31844. if (backslashIsEscaped) {
  31845. return match;
  31846. }
  31847. var codePoint = parseInt(hexDigits, 16);
  31848. var value;
  31849. if (codePoint <= 0xFFFF) {
  31850. value = '\\u' + zeroPad(codePoint.toString(16).toUpperCase());
  31851. } else {
  31852. var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;
  31853. var low = (codePoint - 0x10000) % 0x400 + 0xDC00;
  31854. value = '\\u' + high.toString(16).toUpperCase() + '\\u' + low.toString(16).toUpperCase();
  31855. }
  31856. return backslashes + value;
  31857. });
  31858. }
  31859. var UnicodeEscapeSequenceTransformer = function($__super) {
  31860. function UnicodeEscapeSequenceTransformer() {
  31861. $traceurRuntime.superConstructor(UnicodeEscapeSequenceTransformer).apply(this, arguments);
  31862. }
  31863. return ($traceurRuntime.createClass)(UnicodeEscapeSequenceTransformer, {transformLiteralExpression: function(tree) {
  31864. var token = tree.literalToken;
  31865. if (needsTransform(token)) {
  31866. var value = transformToken(token);
  31867. return new LiteralExpression(tree.location, new LiteralToken(STRING, value, token.location));
  31868. }
  31869. return tree;
  31870. }}, {}, $__super);
  31871. }(ParseTreeTransformer);
  31872. return {get UnicodeEscapeSequenceTransformer() {
  31873. return UnicodeEscapeSequenceTransformer;
  31874. }};
  31875. });
  31876. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/UniqueIdentifierGenerator.js", [], function() {
  31877. "use strict";
  31878. var __moduleName = "traceur@0.0.112/src/codegeneration/UniqueIdentifierGenerator.js";
  31879. var UniqueIdentifierGenerator = function() {
  31880. function UniqueIdentifierGenerator() {
  31881. this.identifierIndex = 0;
  31882. }
  31883. return ($traceurRuntime.createClass)(UniqueIdentifierGenerator, {generateUniqueIdentifier: function() {
  31884. return ("$__" + this.identifierIndex++);
  31885. }}, {});
  31886. }();
  31887. return {get UniqueIdentifierGenerator() {
  31888. return UniqueIdentifierGenerator;
  31889. }};
  31890. });
  31891. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ConstChecker.js", [], function() {
  31892. "use strict";
  31893. var __moduleName = "traceur@0.0.112/src/semantics/ConstChecker.js";
  31894. var IDENTIFIER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).IDENTIFIER_EXPRESSION;
  31895. var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ConstChecker.js")),
  31896. CONST = $__3.CONST,
  31897. MINUS_MINUS = $__3.MINUS_MINUS,
  31898. PLUS_PLUS = $__3.PLUS_PLUS;
  31899. var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeVisitor.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).ScopeVisitor;
  31900. var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).ScopeChainBuilder;
  31901. var ConstChecker = function($__super) {
  31902. function ConstChecker(scopeBuilder, reporter) {
  31903. $traceurRuntime.superConstructor(ConstChecker).call(this);
  31904. this.scopeBuilder_ = scopeBuilder;
  31905. this.reporter_ = reporter;
  31906. }
  31907. return ($traceurRuntime.createClass)(ConstChecker, {
  31908. pushScope: function(tree) {
  31909. return this.scope = this.scopeBuilder_.getScopeForTree(tree);
  31910. },
  31911. visitUnaryExpression: function(tree) {
  31912. if (tree.operand.type === IDENTIFIER_EXPRESSION && (tree.operator.type === PLUS_PLUS || tree.operator.type === MINUS_MINUS)) {
  31913. this.validateMutation_(tree.operand);
  31914. }
  31915. $traceurRuntime.superGet(this, ConstChecker.prototype, "visitUnaryExpression").call(this, tree);
  31916. },
  31917. visitPostfixExpression: function(tree) {
  31918. if (tree.operand.type === IDENTIFIER_EXPRESSION) {
  31919. this.validateMutation_(tree.operand);
  31920. }
  31921. $traceurRuntime.superGet(this, ConstChecker.prototype, "visitPostfixExpression").call(this, tree);
  31922. },
  31923. visitBinaryExpression: function(tree) {
  31924. if (tree.left.type === IDENTIFIER_EXPRESSION && tree.operator.isAssignmentOperator()) {
  31925. this.validateMutation_(tree.left);
  31926. }
  31927. $traceurRuntime.superGet(this, ConstChecker.prototype, "visitBinaryExpression").call(this, tree);
  31928. },
  31929. validateMutation_: function(identifierExpression) {
  31930. if (this.inWithBlock) {
  31931. return;
  31932. }
  31933. var binding = this.scope.getBinding(identifierExpression);
  31934. if (binding === null) {
  31935. return;
  31936. }
  31937. var $__1 = binding,
  31938. type = $__1.type,
  31939. tree = $__1.tree;
  31940. if (type === CONST) {
  31941. this.reportError_(identifierExpression.location, (tree.getStringValue() + " is read-only"));
  31942. }
  31943. },
  31944. reportError_: function(location, message) {
  31945. this.reporter_.reportError(location, message);
  31946. }
  31947. }, {}, $__super);
  31948. }(ScopeVisitor);
  31949. function validate(tree, reporter) {
  31950. var builder = new ScopeChainBuilder(reporter);
  31951. builder.visitAny(tree);
  31952. var checker = new ConstChecker(builder, reporter);
  31953. checker.visitAny(tree);
  31954. }
  31955. return {
  31956. get ConstChecker() {
  31957. return ConstChecker;
  31958. },
  31959. get validate() {
  31960. return validate;
  31961. }
  31962. };
  31963. });
  31964. $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/FreeVariableChecker.js", [], function() {
  31965. "use strict";
  31966. var __moduleName = "traceur@0.0.112/src/semantics/FreeVariableChecker.js";
  31967. var ScopeChainBuilderWithReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilderWithReferences.js", "traceur@0.0.112/src/semantics/FreeVariableChecker.js")).ScopeChainBuilderWithReferences;
  31968. var FreeVariableChecker = function($__super) {
  31969. function FreeVariableChecker(reporter, global) {
  31970. $traceurRuntime.superConstructor(FreeVariableChecker).call(this, reporter);
  31971. this.global_ = global;
  31972. }
  31973. return ($traceurRuntime.createClass)(FreeVariableChecker, {referenceFound: function(tree, name) {
  31974. if (this.scope.getBinding(tree))
  31975. return;
  31976. if (!(name in this.global_)) {
  31977. this.reporter.reportError(tree.location, (name + " is not defined"));
  31978. }
  31979. }}, {}, $__super);
  31980. }(ScopeChainBuilderWithReferences);
  31981. function validate(tree, reporter) {
  31982. var global = arguments[2] !== (void 0) ? arguments[2] : Reflect.global;
  31983. var checker = new FreeVariableChecker(reporter, global);
  31984. checker.visitAny(tree);
  31985. }
  31986. return {get validate() {
  31987. return validate;
  31988. }};
  31989. });
  31990. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js", [], function() {
  31991. "use strict";
  31992. var __moduleName = "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js";
  31993. var AmdTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AmdTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AmdTransformer;
  31994. var AnnotationsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AnnotationsTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AnnotationsTransformer;
  31995. var ArrayComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrayComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ArrayComprehensionTransformer;
  31996. var ArrowFunctionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrowFunctionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ArrowFunctionTransformer;
  31997. var AsyncGeneratorTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncGeneratorTransformPass.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AsyncGeneratorTransformPass;
  31998. var AsyncToGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncToGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AsyncToGeneratorTransformer;
  31999. var BlockBindingTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BlockBindingTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).BlockBindingTransformer;
  32000. var ClassTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ClassTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ClassTransformer;
  32001. var ClosureModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ClosureModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ClosureModuleTransformer;
  32002. var CommonJsModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CommonJsModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).CommonJsModuleTransformer;
  32003. var DefaultParametersTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DefaultParametersTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).DefaultParametersTransformer;
  32004. var DestructuringTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DestructuringTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).DestructuringTransformer;
  32005. var ExponentiationTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExponentiationTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ExponentiationTransformer;
  32006. var ForOfTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ForOfTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ForOfTransformer;
  32007. var ForOnTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ForOnTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ForOnTransformer;
  32008. var GeneratorComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./GeneratorComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).GeneratorComprehensionTransformer;
  32009. var GeneratorTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./GeneratorTransformPass.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).GeneratorTransformPass;
  32010. var InlineModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).InlineModuleTransformer;
  32011. var InstantiateModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InstantiateModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).InstantiateModuleTransformer;
  32012. var JsxTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).JsxTransformer;
  32013. var MemberVariableTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).MemberVariableTransformer;
  32014. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ModuleTransformer;
  32015. var MultiTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MultiTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).MultiTransformer;
  32016. var NumericLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./NumericLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).NumericLiteralTransformer;
  32017. var ObjectLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ObjectLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ObjectLiteralTransformer;
  32018. var ProperTailCallTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ProperTailCallTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ProperTailCallTransformer;
  32019. var PropertyNameShorthandTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PropertyNameShorthandTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).PropertyNameShorthandTransformer;
  32020. var RegularExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RegularExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).RegularExpressionTransformer;
  32021. var RestParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RestParameterTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).RestParameterTransformer;
  32022. var SpreadPropertiesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SpreadPropertiesTransformer;
  32023. var SpreadTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SpreadTransformer;
  32024. var SuperTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SuperTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SuperTransformer;
  32025. var SymbolTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SymbolTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SymbolTransformer;
  32026. var TemplateLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TemplateLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TemplateLiteralTransformer;
  32027. var TypeToExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeToExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TypeToExpressionTransformer;
  32028. var TypeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TypeTransformer;
  32029. var UnicodeEscapeSequenceTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UnicodeEscapeSequenceTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).UnicodeEscapeSequenceTransformer;
  32030. var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UniqueIdentifierGenerator.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).UniqueIdentifierGenerator;
  32031. var validateConst = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ConstChecker.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).validate;
  32032. var validateFreeVariables = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/FreeVariableChecker.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).validate;
  32033. var FromOptionsTransformer = function($__super) {
  32034. function FromOptionsTransformer(reporter, options) {
  32035. var $__1;
  32036. $traceurRuntime.superConstructor(FromOptionsTransformer).call(this, reporter, options.validate);
  32037. var transformOptions = options.transformOptions;
  32038. var idGenerator = new UniqueIdentifierGenerator();
  32039. var append = ($__1 = this, function(transformer) {
  32040. $__1.append(function(tree) {
  32041. return new transformer(idGenerator, reporter, options).transformAny(tree);
  32042. });
  32043. });
  32044. if (transformOptions.blockBinding) {
  32045. this.append(function(tree) {
  32046. validateConst(tree, reporter);
  32047. return tree;
  32048. });
  32049. }
  32050. if (options.freeVariableChecker) {
  32051. this.append(function(tree) {
  32052. validateFreeVariables(tree, reporter);
  32053. return tree;
  32054. });
  32055. }
  32056. if (transformOptions.exponentiation)
  32057. append(ExponentiationTransformer);
  32058. if (transformOptions.numericLiterals)
  32059. append(NumericLiteralTransformer);
  32060. if (transformOptions.unicodeExpressions)
  32061. append(RegularExpressionTransformer);
  32062. if (transformOptions.jsx) {
  32063. append(JsxTransformer);
  32064. }
  32065. if (transformOptions.templateLiterals)
  32066. append(TemplateLiteralTransformer);
  32067. if (transformOptions.types && transformOptions.annotations) {
  32068. append(TypeToExpressionTransformer);
  32069. }
  32070. if (transformOptions.unicodeEscapeSequences)
  32071. append(UnicodeEscapeSequenceTransformer);
  32072. if (transformOptions.annotations)
  32073. append(AnnotationsTransformer);
  32074. if (transformOptions.propertyNameShorthand)
  32075. append(PropertyNameShorthandTransformer);
  32076. if (transformOptions.memberVariables) {
  32077. append(MemberVariableTransformer);
  32078. }
  32079. if (transformOptions.classes) {
  32080. append(SuperTransformer);
  32081. }
  32082. if (transformOptions.arrowFunctions) {
  32083. append(ArrowFunctionTransformer);
  32084. }
  32085. if (transformOptions.classes) {
  32086. append(ClassTransformer);
  32087. }
  32088. if (transformOptions.spreadProperties) {
  32089. append(SpreadPropertiesTransformer);
  32090. }
  32091. if (transformOptions.propertyMethods || transformOptions.computedPropertyNames || transformOptions.properTailCalls) {
  32092. append(ObjectLiteralTransformer);
  32093. }
  32094. if (transformOptions.generatorComprehension)
  32095. append(GeneratorComprehensionTransformer);
  32096. if (transformOptions.arrayComprehension)
  32097. append(ArrayComprehensionTransformer);
  32098. if (transformOptions.forOf)
  32099. append(ForOfTransformer);
  32100. if (transformOptions.asyncGenerators) {
  32101. append(AsyncGeneratorTransformPass);
  32102. }
  32103. if (transformOptions.forOn)
  32104. append(ForOnTransformer);
  32105. if (transformOptions.restParameters)
  32106. append(RestParameterTransformer);
  32107. if (transformOptions.defaultParameters)
  32108. append(DefaultParametersTransformer);
  32109. if (transformOptions.destructuring)
  32110. append(DestructuringTransformer);
  32111. if (transformOptions.types)
  32112. append(TypeTransformer);
  32113. if (transformOptions.spread)
  32114. append(SpreadTransformer);
  32115. if (transformOptions.blockBinding) {
  32116. this.append(function(tree) {
  32117. var transformer = new BlockBindingTransformer(idGenerator, reporter, tree);
  32118. return transformer.transformAny(tree);
  32119. });
  32120. }
  32121. if (transformOptions.asyncFunctions && options.generators === 'parse') {
  32122. append(AsyncToGeneratorTransformer);
  32123. } else if (transformOptions.generators || transformOptions.asyncFunctions) {
  32124. append(GeneratorTransformPass);
  32125. }
  32126. if (transformOptions.symbols)
  32127. append(SymbolTransformer);
  32128. if (transformOptions.properTailCalls) {
  32129. append(ProperTailCallTransformer);
  32130. }
  32131. if (transformOptions.modules) {
  32132. switch (transformOptions.modules) {
  32133. case 'commonjs':
  32134. append(CommonJsModuleTransformer);
  32135. break;
  32136. case 'amd':
  32137. append(AmdTransformer);
  32138. break;
  32139. case 'closure':
  32140. append(ClosureModuleTransformer);
  32141. break;
  32142. case 'inline':
  32143. append(InlineModuleTransformer);
  32144. break;
  32145. case 'instantiate':
  32146. append(InstantiateModuleTransformer);
  32147. break;
  32148. case 'bootstrap':
  32149. append(ModuleTransformer);
  32150. break;
  32151. case 'parse':
  32152. break;
  32153. default:
  32154. throw new Error('Invalid modules transform option');
  32155. }
  32156. }
  32157. }
  32158. return ($traceurRuntime.createClass)(FromOptionsTransformer, {}, {}, $__super);
  32159. }(MultiTransformer);
  32160. return {get FromOptionsTransformer() {
  32161. return FromOptionsTransformer;
  32162. }};
  32163. });
  32164. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js", [], function() {
  32165. "use strict";
  32166. var __moduleName = "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js";
  32167. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")),
  32168. CONST = $__2.CONST,
  32169. LET = $__2.LET;
  32170. var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).ModuleTransformer;
  32171. var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")),
  32172. createAssignmentStatement = $__4.createAssignmentStatement,
  32173. createArgumentList = $__4.createArgumentList,
  32174. createBindingIdentifier = $__4.createBindingIdentifier,
  32175. createCallExpression = $__4.createCallExpression,
  32176. createExpressionStatement = $__4.createExpressionStatement,
  32177. createForInStatement = $__4.createForInStatement,
  32178. createFunctionBody = $__4.createFunctionBody,
  32179. createIfStatement = $__4.createIfStatement,
  32180. createImmediatelyInvokedFunctionExpression = $__4.createImmediatelyInvokedFunctionExpression,
  32181. createIdentifierExpression = $__4.createIdentifierExpression,
  32182. createMemberLookupExpression = $__4.createMemberLookupExpression,
  32183. createMemberExpression = $__4.createMemberExpression,
  32184. createObjectLiteral = $__4.createObjectLiteral,
  32185. createReturnStatement = $__4.createReturnStatement,
  32186. createUseStrictDirective = $__4.createUseStrictDirective,
  32187. createVariableDeclarationList = $__4.createVariableDeclarationList,
  32188. createVariableStatement = $__4.createVariableStatement;
  32189. var IMPORT_SPECIFIER_SET = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).IMPORT_SPECIFIER_SET;
  32190. var AnonBlock = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).AnonBlock;
  32191. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).parseStatement;
  32192. var anonInlineModules = 0;
  32193. var InlineES6ModuleTransformer = function($__super) {
  32194. function InlineES6ModuleTransformer(identifierGenerator, reporter, options, metadata) {
  32195. $traceurRuntime.superConstructor(InlineES6ModuleTransformer).call(this, identifierGenerator, reporter, options);
  32196. this.metadata_ = metadata;
  32197. }
  32198. return ($traceurRuntime.createClass)(InlineES6ModuleTransformer, {
  32199. moduleProlog: function() {
  32200. return [createUseStrictDirective()];
  32201. },
  32202. wrapModule: function(statements) {
  32203. var seed = this.moduleName || 'anon_' + ++anonInlineModules;
  32204. var idName = this.getTempVarNameForModuleName(seed);
  32205. if (this.isRootModule) {
  32206. statements.pop();
  32207. return statements;
  32208. }
  32209. var body = createFunctionBody(statements);
  32210. var moduleExpression = createImmediatelyInvokedFunctionExpression(body);
  32211. return [createVariableStatement(CONST, idName, moduleExpression)];
  32212. },
  32213. transformExportDeclaration: function(tree) {
  32214. if (this.isRootModule)
  32215. return tree;
  32216. this.exportVisitor.visitAny(tree);
  32217. return this.transformAny(tree.declaration);
  32218. },
  32219. transformImportDeclaration: function(tree) {
  32220. if (!tree.importClause || (tree.importClause.type === IMPORT_SPECIFIER_SET && tree.importClause.specifiers.length === 0)) {
  32221. return createExpressionStatement(this.transformAny(tree.moduleSpecifier));
  32222. }
  32223. var binding = this.transformAny(tree.importClause);
  32224. var initializer = this.transformAny(tree.moduleSpecifier);
  32225. return createVariableStatement(CONST, binding, initializer);
  32226. },
  32227. transformNamedExport: function(tree) {
  32228. return new AnonBlock(null, []);
  32229. },
  32230. addExportStatement: function(statements) {
  32231. var $__1 = this;
  32232. var exportProperties = this.getExportProperties();
  32233. var exportObject = createObjectLiteral(exportProperties);
  32234. if (this.exportVisitor.starExports.length) {
  32235. var starExports = this.exportVisitor.starExports;
  32236. var starIdents = starExports.map(function(moduleSpecifier) {
  32237. return createIdentifierExpression($__1.getTempVarNameForModuleSpecifier(moduleSpecifier));
  32238. });
  32239. if (exportProperties.length)
  32240. starIdents.push(exportObject);
  32241. var exports = this.getTempIdentifier();
  32242. statements.push(createVariableStatement(LET, exports, createObjectLiteral("")));
  32243. var key = this.getTempIdentifier();
  32244. starIdents.forEach(function(starIdent) {
  32245. statements.push(createForInStatement(createVariableDeclarationList(LET, key, null), starIdent, createIfStatement(createCallExpression(createMemberExpression(starIdent, 'hasOwnProperty'), createArgumentList([createIdentifierExpression(key)])), createAssignmentStatement(createMemberLookupExpression(createIdentifierExpression(exports), createIdentifierExpression(key)), createMemberLookupExpression(starIdent, createIdentifierExpression(key))))));
  32246. });
  32247. statements.push(createReturnStatement(createIdentifierExpression(exports)));
  32248. return statements;
  32249. }
  32250. statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", ""]), exportObject));
  32251. return statements;
  32252. },
  32253. transformModuleSpecifier: function(tree) {
  32254. return createBindingIdentifier(this.getTempVarNameForModuleSpecifier(tree));
  32255. },
  32256. get isRootModule() {
  32257. return this.moduleName === (this.metadata_ && this.metadata_.rootModule);
  32258. }
  32259. }, {}, $__super);
  32260. }(ModuleTransformer);
  32261. return {get InlineES6ModuleTransformer() {
  32262. return InlineES6ModuleTransformer;
  32263. }};
  32264. });
  32265. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PureES6Transformer.js", [], function() {
  32266. "use strict";
  32267. var __moduleName = "traceur@0.0.112/src/codegeneration/PureES6Transformer.js";
  32268. var AnnotationsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AnnotationsTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).AnnotationsTransformer;
  32269. var AsyncToGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncToGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).AsyncToGeneratorTransformer;
  32270. var InlineES6ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineES6ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).InlineES6ModuleTransformer;
  32271. var JsxTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).JsxTransformer;
  32272. var MemberVariableTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).MemberVariableTransformer;
  32273. var MultiTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MultiTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).MultiTransformer;
  32274. var SpreadPropertiesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).SpreadPropertiesTransformer;
  32275. var TypeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).TypeTransformer;
  32276. var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UniqueIdentifierGenerator.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).UniqueIdentifierGenerator;
  32277. var validateFreeVariables = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/FreeVariableChecker.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).validate;
  32278. var PureES6Transformer = function($__super) {
  32279. function PureES6Transformer(reporter, options, metadata) {
  32280. var $__1;
  32281. $traceurRuntime.superConstructor(PureES6Transformer).call(this, reporter, options.validate);
  32282. var idGenerator = new UniqueIdentifierGenerator();
  32283. var append = ($__1 = this, function(transformer) {
  32284. $__1.append(function(tree) {
  32285. return new transformer(idGenerator, reporter, options, metadata).transformAny(tree);
  32286. });
  32287. });
  32288. if (options.freeVariableChecker) {
  32289. this.append(function(tree) {
  32290. validateFreeVariables(tree, reporter);
  32291. return tree;
  32292. });
  32293. }
  32294. if (options.jsx) {
  32295. append(JsxTransformer);
  32296. }
  32297. if (options.spreadProperties) {
  32298. append(SpreadPropertiesTransformer);
  32299. }
  32300. if (options.memberVariables) {
  32301. append(MemberVariableTransformer);
  32302. }
  32303. append(AnnotationsTransformer);
  32304. append(TypeTransformer);
  32305. append(AsyncToGeneratorTransformer);
  32306. if (options.modules === 'inline') {
  32307. append(InlineES6ModuleTransformer);
  32308. }
  32309. }
  32310. return ($traceurRuntime.createClass)(PureES6Transformer, {}, {}, $__super);
  32311. }(MultiTransformer);
  32312. return {get PureES6Transformer() {
  32313. return PureES6Transformer;
  32314. }};
  32315. });
  32316. $traceurRuntime.registerModule("traceur@0.0.112/src/Compiler.js", [], function() {
  32317. "use strict";
  32318. var __moduleName = "traceur@0.0.112/src/Compiler.js";
  32319. var AttachModuleNameTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/AttachModuleNameTransformer.js", "traceur@0.0.112/src/Compiler.js")).AttachModuleNameTransformer;
  32320. var FromOptionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/FromOptionsTransformer.js", "traceur@0.0.112/src/Compiler.js")).FromOptionsTransformer;
  32321. var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/Parser.js", "traceur@0.0.112/src/Compiler.js")).Parser;
  32322. var PureES6Transformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PureES6Transformer.js", "traceur@0.0.112/src/Compiler.js")).PureES6Transformer;
  32323. var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/SourceFile.js", "traceur@0.0.112/src/Compiler.js")).SourceFile;
  32324. var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/CollectingErrorReporter.js", "traceur@0.0.112/src/Compiler.js")).CollectingErrorReporter;
  32325. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/Compiler.js")),
  32326. Options = $__10.Options,
  32327. versionLockedOptions = $__10.versionLockedOptions;
  32328. var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeMapWriter.js", "traceur@0.0.112/src/Compiler.js")).ParseTreeMapWriter;
  32329. var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeWriter.js", "traceur@0.0.112/src/Compiler.js")).ParseTreeWriter;
  32330. var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/Compiler.js")),
  32331. SourceMapConsumer = $__13.SourceMapConsumer,
  32332. SourceMapGenerator = $__13.SourceMapGenerator;
  32333. function merge() {
  32334. for (var srcs = [],
  32335. $__2 = 0; $__2 < arguments.length; $__2++)
  32336. srcs[$__2] = arguments[$__2];
  32337. var dest = Object.create(null);
  32338. srcs.forEach(function(src) {
  32339. Object.keys(src).forEach(function(key) {
  32340. dest[key] = src[key];
  32341. });
  32342. var srcModules = src.modules;
  32343. if (typeof srcModules !== 'undefined') {
  32344. dest.modules = srcModules;
  32345. }
  32346. });
  32347. return dest;
  32348. }
  32349. function basePath(name) {
  32350. if (!name)
  32351. return null;
  32352. var lastSlash = name.lastIndexOf('/');
  32353. if (lastSlash < 0)
  32354. return null;
  32355. return name.substring(0, lastSlash + 1);
  32356. }
  32357. var Compiler = function() {
  32358. function Compiler() {
  32359. var overridingOptions = arguments[0] !== (void 0) ? arguments[0] : {};
  32360. this.options_ = new Options(this.defaultOptions());
  32361. this.options_.setFromObject(overridingOptions);
  32362. this.sourceMapConfiguration_ = null;
  32363. this.sourceMapInfo_ = null;
  32364. this.sourceMapCache_ = null;
  32365. }
  32366. return ($traceurRuntime.createClass)(Compiler, {
  32367. compile: function(content) {
  32368. var sourceName = arguments[1] !== (void 0) ? arguments[1] : '<compileSource>';
  32369. var outputName = arguments[2] !== (void 0) ? arguments[2] : '<compileOutput>';
  32370. var sourceRoot = arguments[3];
  32371. sourceName = this.normalize(sourceName);
  32372. outputName = this.normalize(outputName);
  32373. var tree = this.parse(content, sourceName);
  32374. tree = this.transform(tree, sourceName);
  32375. var sourceURL = sourceName !== outputName ? sourceName : undefined;
  32376. if (sourceRoot === undefined)
  32377. sourceRoot = this.options_.sourceRoot;
  32378. return this.write(tree, outputName, sourceRoot, sourceURL);
  32379. },
  32380. throwIfErrors: function(errorReporter) {
  32381. if (errorReporter.hadError())
  32382. throw errorReporter.toError();
  32383. },
  32384. parse: function(content) {
  32385. var sourceName = arguments[1] !== (void 0) ? arguments[1] : '<compiler-parse-input>';
  32386. sourceName = this.normalize(sourceName);
  32387. this.sourceMapCache_ = null;
  32388. this.sourceMapConfiguration_ = null;
  32389. var errorReporter = new CollectingErrorReporter();
  32390. var sourceFile = new SourceFile(sourceName, content);
  32391. var parser = new Parser(sourceFile, errorReporter, this.options_);
  32392. var tree = this.options_.script ? parser.parseScript() : parser.parseModule();
  32393. this.throwIfErrors(errorReporter);
  32394. return tree;
  32395. },
  32396. transform: function(tree) {
  32397. var candidateModuleName = arguments[1];
  32398. var metadata = arguments[2];
  32399. var transformer;
  32400. if (candidateModuleName) {
  32401. var transformer$__3 = new AttachModuleNameTransformer(candidateModuleName);
  32402. tree = transformer$__3.transformAny(tree);
  32403. }
  32404. var errorReporter = new CollectingErrorReporter();
  32405. if (this.options_.outputLanguage.toLowerCase() === 'es6') {
  32406. transformer = new PureES6Transformer(errorReporter, this.options_, metadata);
  32407. } else {
  32408. transformer = new FromOptionsTransformer(errorReporter, this.options_);
  32409. }
  32410. var transformedTree = transformer.transform(tree);
  32411. this.throwIfErrors(errorReporter);
  32412. return transformedTree;
  32413. },
  32414. createSourceMapConfiguration_: function(outputName) {
  32415. var sourceRoot = arguments[1];
  32416. var sourceURL = arguments[2];
  32417. if (this.options_.sourceMaps) {
  32418. return {
  32419. sourceMapGenerator: new SourceMapGenerator({
  32420. file: outputName,
  32421. sourceRoot: sourceRoot,
  32422. skipValidation: true
  32423. }),
  32424. basepath: basePath(outputName),
  32425. inputSourceMap: this.options_.inputSourceMap,
  32426. sourceURL: sourceURL,
  32427. outputName: outputName
  32428. };
  32429. }
  32430. },
  32431. getSourceMap: function() {
  32432. if (this.sourceMapCache_) {
  32433. return this.sourceMapCache_;
  32434. }
  32435. if (this.sourceMapConfiguration_) {
  32436. var sourceMap = this.sourceMapConfiguration_.sourceMapGenerator.toString();
  32437. var inputSourceMap = this.sourceMapConfiguration_.inputSourceMap;
  32438. if (inputSourceMap) {
  32439. var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(sourceMap));
  32440. generator.applySourceMap(new SourceMapConsumer(inputSourceMap));
  32441. sourceMap = generator.toJSON();
  32442. }
  32443. this.sourceMapCache_ = sourceMap;
  32444. return sourceMap;
  32445. }
  32446. },
  32447. get sourceMapInfo() {
  32448. if (!this.sourceMapInfo_ && this.sourceMapConfiguration_) {
  32449. var sourceMap = this.getSourceMap();
  32450. this.sourceMapInfo_ = {
  32451. url: this.sourceMapConfiguration_.sourceURL,
  32452. outputName: this.sourceMapConfiguration_.outputName,
  32453. map: sourceMap
  32454. };
  32455. }
  32456. return this.sourceMapInfo_;
  32457. },
  32458. write: function(tree) {
  32459. var outputName = arguments[1];
  32460. var sourceRoot = arguments[2];
  32461. var sourceURL = arguments[3];
  32462. outputName = this.normalize(outputName);
  32463. if (sourceRoot === undefined)
  32464. sourceRoot = this.options_.sourceRoot;
  32465. if (sourceRoot === true)
  32466. sourceRoot = basePath(outputName);
  32467. else if (!sourceRoot)
  32468. sourceRoot = undefined;
  32469. else
  32470. sourceRoot = this.normalize(sourceRoot);
  32471. var writer;
  32472. this.sourceMapCache_ = null;
  32473. this.sourceMapConfiguration_ = this.createSourceMapConfiguration_(outputName, sourceRoot, sourceURL);
  32474. if (this.sourceMapConfiguration_) {
  32475. this.sourceMapConfiguration_.lowResolution = this.options_.lowResolutionSourceMap;
  32476. writer = new ParseTreeMapWriter(this.sourceMapConfiguration_, this.options_);
  32477. } else {
  32478. writer = new ParseTreeWriter(this.options_);
  32479. }
  32480. writer.visitAny(tree);
  32481. var compiledCode = writer.toString();
  32482. var link = this.debuggerLink(sourceURL, outputName);
  32483. if (link) {
  32484. compiledCode += link;
  32485. }
  32486. return compiledCode;
  32487. },
  32488. debuggerLink: function(sourceURL, outputName) {
  32489. if (this.sourceMapConfiguration_) {
  32490. if (this.options_.sourceMaps === 'memory') {
  32491. return;
  32492. }
  32493. var sourceMappingURL = this.sourceMappingURL(sourceURL || outputName || 'unnamed.js');
  32494. return '//# sourceMappingURL=' + sourceMappingURL + '\n';
  32495. } else {
  32496. if (sourceURL) {
  32497. return '//# sourceURL=' + sourceURL + '\n';
  32498. }
  32499. }
  32500. },
  32501. sourceName: function(filename) {
  32502. return filename;
  32503. },
  32504. sourceMappingURL: function(path) {
  32505. if (this.options_.sourceMaps === 'inline') {
  32506. if (Reflect.global.btoa) {
  32507. return 'data:application/json;base64,' + btoa(unescape(encodeURIComponent(this.getSourceMap())));
  32508. }
  32509. }
  32510. path = path || 'unamed.js';
  32511. path = path.split('/').pop();
  32512. return path + '.map';
  32513. },
  32514. sourceNameFromTree: function(tree) {
  32515. return tree.location.start.source.name;
  32516. },
  32517. defaultOptions: function() {
  32518. return versionLockedOptions;
  32519. },
  32520. normalize: function(name) {
  32521. return name && name.replace(/\\/g, '/');
  32522. }
  32523. }, {
  32524. script: function(content) {
  32525. var options = arguments[1] !== (void 0) ? arguments[1] : {};
  32526. options = new Options(options);
  32527. options.script = true;
  32528. return new Compiler(options).compile(content);
  32529. },
  32530. module: function(content) {
  32531. var options = arguments[1] !== (void 0) ? arguments[1] : {};
  32532. options = new Options(options);
  32533. options.modules = 'bootstrap';
  32534. return new Compiler(options).compile(content);
  32535. },
  32536. amdOptions: function() {
  32537. var options = arguments[0] !== (void 0) ? arguments[0] : {};
  32538. var amdOptions = {
  32539. modules: 'amd',
  32540. sourceMaps: false,
  32541. moduleName: false
  32542. };
  32543. return merge(amdOptions, options);
  32544. },
  32545. closureOptions: function() {
  32546. var options = arguments[0] !== (void 0) ? arguments[0] : {};
  32547. var closureOptions = {
  32548. modules: 'closure',
  32549. sourceMaps: false,
  32550. moduleName: true
  32551. };
  32552. return merge(closureOptions, options);
  32553. },
  32554. commonJSOptions: function() {
  32555. var options = arguments[0] !== (void 0) ? arguments[0] : {};
  32556. var commonjsOptions = {
  32557. modules: 'commonjs',
  32558. sourceMaps: false,
  32559. moduleName: false
  32560. };
  32561. return merge(commonjsOptions, options);
  32562. }
  32563. });
  32564. }();
  32565. return {get Compiler() {
  32566. return Compiler;
  32567. }};
  32568. });
  32569. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js", [], function() {
  32570. "use strict";
  32571. var __moduleName = "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js";
  32572. var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js")).ParseTreeTransformer;
  32573. var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js")),
  32574. BindingIdentifier = $__2.BindingIdentifier,
  32575. BreakStatement = $__2.BreakStatement,
  32576. ContinueStatement = $__2.ContinueStatement,
  32577. DebuggerStatement = $__2.DebuggerStatement,
  32578. EmptyStatement = $__2.EmptyStatement,
  32579. ExportSpecifier = $__2.ExportSpecifier,
  32580. ExportStar = $__2.ExportStar,
  32581. IdentifierExpression = $__2.IdentifierExpression,
  32582. LiteralExpression = $__2.LiteralExpression,
  32583. ModuleSpecifier = $__2.ModuleSpecifier,
  32584. PredefinedType = $__2.PredefinedType,
  32585. PropertyNameShorthand = $__2.PropertyNameShorthand,
  32586. TemplateLiteralPortion = $__2.TemplateLiteralPortion,
  32587. SuperExpression = $__2.SuperExpression,
  32588. ThisExpression = $__2.ThisExpression;
  32589. var CloneTreeTransformer = function($__super) {
  32590. function CloneTreeTransformer() {
  32591. $traceurRuntime.superConstructor(CloneTreeTransformer).apply(this, arguments);
  32592. }
  32593. return ($traceurRuntime.createClass)(CloneTreeTransformer, {
  32594. transformBindingIdentifier: function(tree) {
  32595. return new BindingIdentifier(tree.location, tree.identifierToken);
  32596. },
  32597. transformBreakStatement: function(tree) {
  32598. return new BreakStatement(tree.location, tree.name);
  32599. },
  32600. transformContinueStatement: function(tree) {
  32601. return new ContinueStatement(tree.location, tree.name);
  32602. },
  32603. transformDebuggerStatement: function(tree) {
  32604. return new DebuggerStatement(tree.location);
  32605. },
  32606. transformEmptyStatement: function(tree) {
  32607. return new EmptyStatement(tree.location);
  32608. },
  32609. transformExportSpecifier: function(tree) {
  32610. return new ExportSpecifier(tree.location, tree.lhs, tree.rhs);
  32611. },
  32612. transformExportStar: function(tree) {
  32613. return new ExportStar(tree.location);
  32614. },
  32615. transformIdentifierExpression: function(tree) {
  32616. return new IdentifierExpression(tree.location, tree.identifierToken);
  32617. },
  32618. transformList: function(list) {
  32619. if (!list) {
  32620. return null;
  32621. } else if (list.length === 0) {
  32622. return [];
  32623. } else {
  32624. return $traceurRuntime.superGet(this, CloneTreeTransformer.prototype, "transformList").call(this, list);
  32625. }
  32626. },
  32627. transformLiteralExpression: function(tree) {
  32628. return new LiteralExpression(tree.location, tree.literalToken);
  32629. },
  32630. transformModuleSpecifier: function(tree) {
  32631. return new ModuleSpecifier(tree.location, tree.token);
  32632. },
  32633. transformPredefinedType: function(tree) {
  32634. return new PredefinedType(tree.location, tree.typeToken);
  32635. },
  32636. transformPropertyNameShorthand: function(tree) {
  32637. return new PropertyNameShorthand(tree.location, tree.name);
  32638. },
  32639. transformTemplateLiteralPortion: function(tree) {
  32640. return new TemplateLiteralPortion(tree.location, tree.value);
  32641. },
  32642. transformSuperExpression: function(tree) {
  32643. return new SuperExpression(tree.location);
  32644. },
  32645. transformThisExpression: function(tree) {
  32646. return new ThisExpression(tree.location);
  32647. }
  32648. }, {}, $__super);
  32649. }(ParseTreeTransformer);
  32650. CloneTreeTransformer.cloneTree = function(tree) {
  32651. return new CloneTreeTransformer().transformAny(tree);
  32652. };
  32653. return {get CloneTreeTransformer() {
  32654. return CloneTreeTransformer;
  32655. }};
  32656. });
  32657. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js", [], function() {
  32658. "use strict";
  32659. var __moduleName = "traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js";
  32660. var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js")).parseStatement;
  32661. function createModuleEvaluationStatement(normalizedName) {
  32662. return parseStatement($traceurRuntime.getTemplateObject(["$traceurRuntime.getModule(", " +'')"]), normalizedName);
  32663. }
  32664. return {get createModuleEvaluationStatement() {
  32665. return createModuleEvaluationStatement;
  32666. }};
  32667. });
  32668. $traceurRuntime.registerModule("traceur@0.0.112/src/compiler-imports.js", [], function() {
  32669. "use strict";
  32670. var __moduleName = "traceur@0.0.112/src/compiler-imports.js";
  32671. var $__traceur_64_0_46_0_46_112_47_src_47_Compiler_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Compiler.js", "traceur@0.0.112/src/compiler-imports.js"));
  32672. var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/Parser.js", "traceur@0.0.112/src/compiler-imports.js")).Parser;
  32673. var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/trees/ParseTrees.js", "traceur@0.0.112/src/compiler-imports.js")).Script;
  32674. var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/SourceFile.js", "traceur@0.0.112/src/compiler-imports.js")).SourceFile;
  32675. var syntax = {
  32676. Parser: Parser,
  32677. SourceFile: SourceFile,
  32678. trees: {Script: Script}
  32679. };
  32680. var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeMapWriter.js", "traceur@0.0.112/src/compiler-imports.js")).ParseTreeMapWriter;
  32681. var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeWriter.js", "traceur@0.0.112/src/compiler-imports.js")).ParseTreeWriter;
  32682. var regexpuRewritePattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/regexpuRewritePattern.js", "traceur@0.0.112/src/compiler-imports.js")).regexpuRewritePattern;
  32683. var SourceMapConsumer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/compiler-imports.js")).SourceMapConsumer;
  32684. var SourceMapGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/compiler-imports.js")).SourceMapGenerator;
  32685. var TreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/TreeWriter.js", "traceur@0.0.112/src/compiler-imports.js")).TreeWriter;
  32686. var outputgeneration = {
  32687. ParseTreeMapWriter: ParseTreeMapWriter,
  32688. ParseTreeWriter: ParseTreeWriter,
  32689. regexpuRewritePattern: regexpuRewritePattern,
  32690. SourceMapConsumer: SourceMapConsumer,
  32691. SourceMapGenerator: SourceMapGenerator,
  32692. TreeWriter: TreeWriter
  32693. };
  32694. var AttachModuleNameTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/AttachModuleNameTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).AttachModuleNameTransformer;
  32695. var CloneTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/CloneTreeTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).CloneTreeTransformer;
  32696. var FromOptionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/FromOptionsTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).FromOptionsTransformer;
  32697. var PureES6Transformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PureES6Transformer.js", "traceur@0.0.112/src/compiler-imports.js")).PureES6Transformer;
  32698. var createModuleEvaluationStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/createModuleEvaluationStatement.js", "traceur@0.0.112/src/compiler-imports.js")).createModuleEvaluationStatement;
  32699. var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PlaceholderParser.js", "traceur@0.0.112/src/compiler-imports.js")),
  32700. parseExpression = $__16.parseExpression,
  32701. parseModule = $__16.parseModule,
  32702. parseScript = $__16.parseScript,
  32703. parseStatement = $__16.parseStatement;
  32704. var codegeneration = {
  32705. CloneTreeTransformer: CloneTreeTransformer,
  32706. FromOptionsTransformer: FromOptionsTransformer,
  32707. PureES6Transformer: PureES6Transformer,
  32708. parseExpression: parseExpression,
  32709. parseModule: parseModule,
  32710. parseScript: parseScript,
  32711. parseStatement: parseStatement,
  32712. module: {
  32713. AttachModuleNameTransformer: AttachModuleNameTransformer,
  32714. createModuleEvaluationStatement: createModuleEvaluationStatement
  32715. }
  32716. };
  32717. return {
  32718. get Compiler() {
  32719. return $__traceur_64_0_46_0_46_112_47_src_47_Compiler_46_js__.Compiler;
  32720. },
  32721. get syntax() {
  32722. return syntax;
  32723. },
  32724. get outputgeneration() {
  32725. return outputgeneration;
  32726. },
  32727. get codegeneration() {
  32728. return codegeneration;
  32729. }
  32730. };
  32731. });
  32732. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js", [], function() {
  32733. "use strict";
  32734. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js";
  32735. var ModuleVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleVisitor.js", "traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js")).ModuleVisitor;
  32736. var ValidationVisitor = function($__super) {
  32737. function ValidationVisitor() {
  32738. $traceurRuntime.superConstructor(ValidationVisitor).apply(this, arguments);
  32739. }
  32740. return ($traceurRuntime.createClass)(ValidationVisitor, {
  32741. checkExport_: function(tree, name) {
  32742. var description = this.validatingModuleDescription_;
  32743. if (description && !description.getExport(name)) {
  32744. var moduleName = description.normalizedName;
  32745. this.reportError(tree, ("'" + name + "' is not exported by '" + moduleName + "'"));
  32746. }
  32747. },
  32748. checkImport_: function(tree, name) {
  32749. var existingImport = this.moduleSymbol.getImport(name);
  32750. if (existingImport) {
  32751. this.reportError(tree, ("'" + name + "' was previously imported at " + existingImport.location.start));
  32752. } else {
  32753. this.moduleSymbol.addImport(name, tree);
  32754. }
  32755. },
  32756. visitAndValidate_: function(moduleDescription, tree) {
  32757. var validatingModuleDescription = this.validatingModuleDescription_;
  32758. this.validatingModuleDescription_ = moduleDescription;
  32759. this.visitAny(tree);
  32760. this.validatingModuleDescription_ = validatingModuleDescription;
  32761. },
  32762. visitNamedExport: function(tree) {
  32763. if (tree.moduleSpecifier) {
  32764. var name = tree.moduleSpecifier.token.processedValue;
  32765. var moduleDescription = this.getExportsListForModuleSpecifier(name);
  32766. this.visitAndValidate_(moduleDescription, tree.exportClause);
  32767. }
  32768. },
  32769. visitExportSpecifier: function(tree) {
  32770. this.checkExport_(tree, tree.lhs.value);
  32771. },
  32772. visitForwardDefaultExport: function(tree) {
  32773. this.checkExport_(tree, 'default');
  32774. },
  32775. visitImportDeclaration: function(tree) {
  32776. var name = tree.moduleSpecifier.token.processedValue;
  32777. var moduleDescription = this.getExportsListForModuleSpecifier(name);
  32778. this.visitAndValidate_(moduleDescription, tree.importClause);
  32779. },
  32780. visitImportSpecifier: function(tree) {
  32781. var importName = tree.binding.getStringValue();
  32782. var exportName = tree.name ? tree.name.value : importName;
  32783. this.checkImport_(tree, importName);
  32784. this.checkExport_(tree, exportName);
  32785. },
  32786. visitImportedBinding: function(tree) {
  32787. var importName = tree.binding.getStringValue();
  32788. this.checkImport_(tree, importName);
  32789. this.checkExport_(tree, 'default');
  32790. },
  32791. visitNameSpaceImport: function(tree) {
  32792. var importName = tree.binding.binding.getStringValue();
  32793. this.checkImport_(tree, importName);
  32794. }
  32795. }, {}, $__super);
  32796. }(ModuleVisitor);
  32797. return {get ValidationVisitor() {
  32798. return ValidationVisitor;
  32799. }};
  32800. });
  32801. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js", [], function() {
  32802. "use strict";
  32803. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js";
  32804. var ExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExportVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js")).ExportVisitor;
  32805. var ValidationVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ValidationVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js")).ValidationVisitor;
  32806. function buildExportList(deps, loader, reporter) {
  32807. function doVisit(ctor) {
  32808. for (var i = 0; i < deps.length; i++) {
  32809. var visitor = new ctor(reporter, loader, deps[i]);
  32810. visitor.visitAny(deps[i].tree);
  32811. }
  32812. }
  32813. function reverseVisit(ctor) {
  32814. for (var i = deps.length - 1; i >= 0; i--) {
  32815. var visitor = new ctor(reporter, loader, deps[i]);
  32816. visitor.visitAny(deps[i].tree);
  32817. }
  32818. }
  32819. reverseVisit(ExportVisitor);
  32820. doVisit(ValidationVisitor);
  32821. }
  32822. return {get buildExportList() {
  32823. return buildExportList;
  32824. }};
  32825. });
  32826. $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js", [], function() {
  32827. "use strict";
  32828. var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js";
  32829. var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js")).ParseTreeVisitor;
  32830. var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringSet.js", "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js")).StringSet;
  32831. var ModuleSpecifierVisitor = function($__super) {
  32832. function ModuleSpecifierVisitor(options) {
  32833. $traceurRuntime.superConstructor(ModuleSpecifierVisitor).call(this);
  32834. this.options_ = options;
  32835. this.moduleSpecifiers_ = new StringSet();
  32836. }
  32837. return ($traceurRuntime.createClass)(ModuleSpecifierVisitor, {
  32838. get moduleSpecifiers() {
  32839. return this.moduleSpecifiers_.valuesAsArray();
  32840. },
  32841. visitModuleSpecifier: function(tree) {
  32842. this.moduleSpecifiers_.add(tree.token.processedValue);
  32843. }
  32844. }, {}, $__super);
  32845. }(ParseTreeVisitor);
  32846. return {get ModuleSpecifierVisitor() {
  32847. return ModuleSpecifierVisitor;
  32848. }};
  32849. });
  32850. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/system-map.js", [], function() {
  32851. "use strict";
  32852. var __moduleName = "traceur@0.0.112/src/loader/system-map.js";
  32853. function prefixMatchLength(name, prefix) {
  32854. var prefixParts = prefix.split('/');
  32855. var nameParts = name.split('/');
  32856. if (prefixParts.length > nameParts.length)
  32857. return 0;
  32858. for (var i = 0; i < prefixParts.length; i++) {
  32859. if (nameParts[i] != prefixParts[i])
  32860. return 0;
  32861. }
  32862. return prefixParts.length;
  32863. }
  32864. function applyMap(map, name, parentName) {
  32865. var curMatch,
  32866. curMatchLength = 0;
  32867. var curParent,
  32868. curParentMatchLength = 0;
  32869. if (parentName) {
  32870. var mappedName;
  32871. Object.getOwnPropertyNames(map).some(function(p) {
  32872. var curMap = map[p];
  32873. if (curMap && typeof curMap === 'object') {
  32874. if (prefixMatchLength(parentName, p) <= curParentMatchLength)
  32875. return;
  32876. Object.getOwnPropertyNames(curMap).forEach(function(q) {
  32877. if (prefixMatchLength(name, q) > curMatchLength) {
  32878. curMatch = q;
  32879. curMatchLength = q.split('/').length;
  32880. curParent = p;
  32881. curParentMatchLength = p.split('/').length;
  32882. }
  32883. });
  32884. }
  32885. if (curMatch) {
  32886. var subPath = name.split('/').splice(curMatchLength).join('/');
  32887. mappedName = map[curParent][curMatch] + (subPath ? '/' + subPath : '');
  32888. return mappedName;
  32889. }
  32890. });
  32891. }
  32892. if (mappedName)
  32893. return mappedName;
  32894. Object.getOwnPropertyNames(map).forEach(function(p) {
  32895. var curMap = map[p];
  32896. if (curMap && typeof curMap === 'string') {
  32897. if (prefixMatchLength(name, p) > curMatchLength) {
  32898. curMatch = p;
  32899. curMatchLength = p.split('/').length;
  32900. }
  32901. }
  32902. });
  32903. if (!curMatch)
  32904. return name;
  32905. var subPath = name.split('/').splice(curMatchLength).join('/');
  32906. return map[curMatch] + (subPath ? '/' + subPath : '');
  32907. }
  32908. var systemjs = {applyMap: applyMap};
  32909. return {get systemjs() {
  32910. return systemjs;
  32911. }};
  32912. });
  32913. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/LoaderCompiler.js", [], function() {
  32914. "use strict";
  32915. var __moduleName = "traceur@0.0.112/src/loader/LoaderCompiler.js";
  32916. var buildExportList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ExportListBuilder.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).buildExportList;
  32917. var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/CollectingErrorReporter.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).CollectingErrorReporter;
  32918. var Compiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Compiler.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).Compiler;
  32919. var ModuleSpecifierVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSpecifierVisitor.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).ModuleSpecifierVisitor;
  32920. var ModuleSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSymbol.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).ModuleSymbol;
  32921. var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Parser.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).Parser;
  32922. var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/SourceFile.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).SourceFile;
  32923. var systemjs = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./system-map.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).systemjs;
  32924. var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/UniqueIdentifierGenerator.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).UniqueIdentifierGenerator;
  32925. var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")),
  32926. isAbsolute = $__10.isAbsolute,
  32927. resolveUrl = $__10.resolveUrl;
  32928. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).assert;
  32929. var NOT_STARTED = 0;
  32930. var LOADING = 1;
  32931. var LOADED = 2;
  32932. var PARSED = 3;
  32933. var TRANSFORMING = 4;
  32934. var TRANSFORMED = 5;
  32935. var COMPLETE = 6;
  32936. var ERROR = 7;
  32937. var identifierGenerator = new UniqueIdentifierGenerator();
  32938. var anonymousSourcesSeen = 0;
  32939. var LoaderCompiler = function() {
  32940. function LoaderCompiler() {}
  32941. return ($traceurRuntime.createClass)(LoaderCompiler, {
  32942. getModuleSpecifiers: function(codeUnit) {
  32943. this.parse(codeUnit);
  32944. var moduleSpecifierVisitor = new ModuleSpecifierVisitor(codeUnit.metadata.traceurOptions);
  32945. moduleSpecifierVisitor.visit(codeUnit.metadata.tree);
  32946. return moduleSpecifierVisitor.moduleSpecifiers;
  32947. },
  32948. parse: function(codeUnit) {
  32949. assert(!codeUnit.metadata.tree);
  32950. var metadata = codeUnit.metadata;
  32951. var options = metadata.traceurOptions;
  32952. if (codeUnit.type === 'script')
  32953. options.script = true;
  32954. metadata.compiler = new Compiler(options);
  32955. var sourceName = codeUnit.metadata.sourceName = codeUnit.address || codeUnit.normalizedName || '(unnamed)#' + String(++anonymousSourcesSeen);
  32956. metadata.tree = metadata.compiler.parse(codeUnit.source, sourceName);
  32957. },
  32958. transform: function(codeUnit) {
  32959. var metadata = codeUnit.metadata;
  32960. metadata.transformedTree = metadata.compiler.transform(metadata.tree, codeUnit.normalizedName, metadata);
  32961. },
  32962. write: function(codeUnit) {
  32963. var metadata = codeUnit.metadata;
  32964. var outputName = metadata.outputName || metadata.sourceName || '<loaderOutput>';
  32965. var sourceRoot = metadata.sourceRoot;
  32966. var sourceURL = metadata.sourceName || codeUnit.normalizedName || codeUnit.address;
  32967. metadata.transcoded = metadata.compiler.write(metadata.transformedTree, outputName, undefined, sourceURL);
  32968. },
  32969. evaluateCodeUnit: function(codeUnit) {
  32970. var result = ('global', eval)(codeUnit.metadata.transcoded);
  32971. codeUnit.metadata.transformedTree = null;
  32972. return result;
  32973. },
  32974. analyzeDependencies: function(dependencies, loader) {
  32975. var deps = [];
  32976. for (var i = 0; i < dependencies.length; i++) {
  32977. var codeUnit = dependencies[i];
  32978. assert(codeUnit.state >= PARSED);
  32979. if (codeUnit.state == PARSED) {
  32980. var symbol = codeUnit.metadata.moduleSymbol = new ModuleSymbol(codeUnit.metadata.tree, codeUnit.normalizedName);
  32981. deps.push(symbol);
  32982. }
  32983. }
  32984. this.checkForErrors(function(reporter) {
  32985. return buildExportList(deps, loader, reporter);
  32986. });
  32987. },
  32988. checkForErrors: function(fncOfReporter) {
  32989. var reporter = new CollectingErrorReporter();
  32990. var result = fncOfReporter(reporter);
  32991. if (reporter.hadError())
  32992. throw reporter.toError();
  32993. return result;
  32994. }
  32995. }, {});
  32996. }();
  32997. return {get LoaderCompiler() {
  32998. return LoaderCompiler;
  32999. }};
  33000. });
  33001. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/InternalLoader.js", [], function() {
  33002. "use strict";
  33003. var __moduleName = "traceur@0.0.112/src/loader/InternalLoader.js";
  33004. var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/loader/InternalLoader.js")).assert;
  33005. var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/InternalLoader.js")).LoaderCompiler;
  33006. var ExportsList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSymbol.js", "traceur@0.0.112/src/loader/InternalLoader.js")).ExportsList;
  33007. var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/InternalLoader.js")),
  33008. isAbsolute = $__13.isAbsolute,
  33009. resolveUrl = $__13.resolveUrl;
  33010. var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/loader/InternalLoader.js")).Options;
  33011. var NOT_STARTED = 0;
  33012. var LOADING = 1;
  33013. var LOADED = 2;
  33014. var PARSED = 3;
  33015. var TRANSFORMING = 4;
  33016. var TRANSFORMED = 5;
  33017. var COMPLETE = 6;
  33018. var ERROR = 7;
  33019. function mapToValues(map) {
  33020. var array = [];
  33021. map.forEach(function(v) {
  33022. array.push(v);
  33023. });
  33024. return array;
  33025. }
  33026. var LoaderError = function($__super) {
  33027. function LoaderError(msg, tree) {
  33028. $traceurRuntime.superConstructor(LoaderError).call(this);
  33029. this.message = msg;
  33030. this.tree = tree;
  33031. this.name = 'LoaderError';
  33032. }
  33033. return ($traceurRuntime.createClass)(LoaderError, {}, {}, $__super);
  33034. }(Error);
  33035. var CodeUnit = function() {
  33036. function CodeUnit(loaderCompiler, normalizedName, type, state, name, referrerName, address) {
  33037. var $__8 = this;
  33038. this.promise = new Promise(function(res, rej) {
  33039. $__8.loaderCompiler = loaderCompiler;
  33040. $__8.normalizedName = normalizedName;
  33041. $__8.type = type;
  33042. $__8.name_ = name;
  33043. $__8.referrerName_ = referrerName;
  33044. $__8.address = address;
  33045. $__8.state_ = state || NOT_STARTED;
  33046. $__8.error = null;
  33047. $__8.result = null;
  33048. $__8.metadata_ = {};
  33049. $__8.dependencies = [];
  33050. $__8.resolve = res;
  33051. $__8.reject = rej;
  33052. });
  33053. }
  33054. return ($traceurRuntime.createClass)(CodeUnit, {
  33055. get state() {
  33056. return this.state_;
  33057. },
  33058. set state(value) {
  33059. if (value < this.state_) {
  33060. throw new Error('Invalid state change');
  33061. }
  33062. this.state_ = value;
  33063. },
  33064. get metadata() {
  33065. return this.metadata_;
  33066. },
  33067. set metadata(value) {
  33068. assert(value);
  33069. this.metadata_ = value;
  33070. },
  33071. nameTrace: function() {
  33072. var trace = this.specifiedAs();
  33073. if (isAbsolute(this.name_)) {
  33074. return trace + 'An absolute name.\n';
  33075. }
  33076. if (this.referrerName_) {
  33077. return trace + this.importedBy() + this.normalizesTo();
  33078. }
  33079. return trace + this.normalizesTo();
  33080. },
  33081. specifiedAs: function() {
  33082. return ("Specified as " + this.name_ + ".\n");
  33083. },
  33084. importedBy: function() {
  33085. return ("Imported by " + this.referrerName_ + ".\n");
  33086. },
  33087. normalizesTo: function() {
  33088. return 'Normalizes to ' + this.normalizedName + '\n';
  33089. }
  33090. }, {});
  33091. }();
  33092. var PreCompiledCodeUnit = function($__super) {
  33093. function PreCompiledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, module) {
  33094. $traceurRuntime.superConstructor(PreCompiledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', COMPLETE, name, referrerName, address);
  33095. this.result = module;
  33096. this.resolve(this.result);
  33097. }
  33098. return ($traceurRuntime.createClass)(PreCompiledCodeUnit, {}, {}, $__super);
  33099. }(CodeUnit);
  33100. var BundledCodeUnit = function($__super) {
  33101. function BundledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, deps, execute, setModule) {
  33102. $traceurRuntime.superConstructor(BundledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', TRANSFORMED, name, referrerName, address);
  33103. this.deps = deps;
  33104. this.execute = execute;
  33105. }
  33106. return ($traceurRuntime.createClass)(BundledCodeUnit, {
  33107. getModuleSpecifiers: function() {
  33108. return this.deps;
  33109. },
  33110. evaluate: function() {
  33111. var $__8 = this;
  33112. var normalizedNames = this.deps.map(function(name) {
  33113. return $__8.loader_.normalize(name);
  33114. });
  33115. var module = this.execute.apply(Reflect.global, normalizedNames);
  33116. setModule(this.normalizedName, module);
  33117. return module;
  33118. }
  33119. }, {}, $__super);
  33120. }(CodeUnit);
  33121. var HookedCodeUnit = function($__super) {
  33122. function HookedCodeUnit() {
  33123. $traceurRuntime.superConstructor(HookedCodeUnit).apply(this, arguments);
  33124. }
  33125. return ($traceurRuntime.createClass)(HookedCodeUnit, {
  33126. getModuleSpecifiers: function() {
  33127. return this.loaderCompiler.getModuleSpecifiers(this);
  33128. },
  33129. evaluate: function() {
  33130. return this.loaderCompiler.evaluateCodeUnit(this);
  33131. }
  33132. }, {}, $__super);
  33133. }(CodeUnit);
  33134. var LoadCodeUnit = function($__super) {
  33135. function LoadCodeUnit(loaderCompiler, normalizedName, name, referrerName, address) {
  33136. $traceurRuntime.superConstructor(LoadCodeUnit).call(this, loaderCompiler, normalizedName, 'module', NOT_STARTED, name, referrerName, address);
  33137. }
  33138. return ($traceurRuntime.createClass)(LoadCodeUnit, {}, {}, $__super);
  33139. }(HookedCodeUnit);
  33140. var EvalCodeUnit = function($__super) {
  33141. function EvalCodeUnit(loaderCompiler, code) {
  33142. var type = arguments[2] !== (void 0) ? arguments[2] : 'script';
  33143. var normalizedName = arguments[3];
  33144. var referrerName = arguments[4];
  33145. var address = arguments[5];
  33146. $traceurRuntime.superConstructor(EvalCodeUnit).call(this, loaderCompiler, normalizedName, type, LOADED, null, referrerName, address);
  33147. this.source = code;
  33148. }
  33149. return ($traceurRuntime.createClass)(EvalCodeUnit, {}, {}, $__super);
  33150. }(HookedCodeUnit);
  33151. var uniqueNameCount = 0;
  33152. var InternalLoader = function() {
  33153. function InternalLoader(loader, loaderCompiler) {
  33154. assert(loaderCompiler);
  33155. this.loader_ = loader;
  33156. this.loaderCompiler = loaderCompiler;
  33157. this.cache = new Map();
  33158. this.urlToKey = Object.create(null);
  33159. this.sync_ = false;
  33160. this.sourceMapsByURL_ = Object.create(null);
  33161. this.sourceMapsByOutputName_ = Object.create(null);
  33162. }
  33163. return ($traceurRuntime.createClass)(InternalLoader, {
  33164. defaultMetadata_: function() {
  33165. var metadata = arguments[0] !== (void 0) ? arguments[0] : {};
  33166. var incoming = metadata.traceurOptions;
  33167. if (incoming && !(incoming instanceof Options)) {
  33168. var unknown = Options.listUnknownOptions(incoming);
  33169. if (unknown.length) {
  33170. console.warn('Unknown metadata.traceurOptions ignored: ' + unknown.join(','));
  33171. }
  33172. }
  33173. metadata.traceurOptions = incoming || new Options();
  33174. return metadata;
  33175. },
  33176. defaultModuleMetadata_: function() {
  33177. var metadata = arguments[0] !== (void 0) ? arguments[0] : {};
  33178. var metadata = this.defaultMetadata_(metadata);
  33179. metadata.traceurOptions.script = false;
  33180. return metadata;
  33181. },
  33182. getSourceMap: function(url) {
  33183. return this.sourceMapsByURL_[url] || this.sourceMapsByOutputName_[url];
  33184. },
  33185. load: function(name) {
  33186. var referrerName = arguments[1] !== (void 0) ? arguments[1] : this.loader_.baseURL;
  33187. var address = arguments[2];
  33188. var metadata = arguments[3] !== (void 0) ? arguments[3] : {};
  33189. metadata = this.defaultMetadata_(metadata);
  33190. var codeUnit = this.getOrCreateCodeUnit_(name, referrerName, address, metadata);
  33191. this.load_(codeUnit);
  33192. return codeUnit.promise.then(function() {
  33193. return codeUnit;
  33194. });
  33195. },
  33196. load_: function(codeUnit) {
  33197. var $__8 = this;
  33198. if (codeUnit.state === ERROR) {
  33199. return codeUnit;
  33200. }
  33201. if (codeUnit.state === TRANSFORMED) {
  33202. this.handleCodeUnitLoaded(codeUnit);
  33203. } else {
  33204. if (codeUnit.state !== NOT_STARTED)
  33205. return codeUnit;
  33206. codeUnit.state = LOADING;
  33207. codeUnit.address = this.loader_.locate(codeUnit);
  33208. this.loader_.fetch(codeUnit).then(function(text) {
  33209. codeUnit.source = text;
  33210. return codeUnit;
  33211. }).then(function(load) {
  33212. return $__8.loader_.translate(load);
  33213. }).then(function(source) {
  33214. codeUnit.source = source;
  33215. codeUnit.state = LOADED;
  33216. $__8.handleCodeUnitLoaded(codeUnit);
  33217. return codeUnit;
  33218. }).catch(function(err) {
  33219. try {
  33220. codeUnit.state = ERROR;
  33221. codeUnit.error = err;
  33222. $__8.handleCodeUnitLoadError(codeUnit);
  33223. } catch (ex) {
  33224. console.error('Internal Error ' + (ex.stack || ex));
  33225. }
  33226. });
  33227. }
  33228. return codeUnit;
  33229. },
  33230. module: function(code, referrerName, address, metadata) {
  33231. var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', null, referrerName, address);
  33232. codeUnit.metadata = this.defaultMetadata_(metadata);
  33233. this.cache.set({}, codeUnit);
  33234. this.handleCodeUnitLoaded(codeUnit);
  33235. return codeUnit.promise;
  33236. },
  33237. define: function(normalizedName, code, address, metadata) {
  33238. var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', normalizedName, null, address);
  33239. var key = this.getKey(normalizedName, 'module');
  33240. codeUnit.metadata = this.defaultMetadata_(metadata);
  33241. this.cache.set(key, codeUnit);
  33242. this.handleCodeUnitLoaded(codeUnit);
  33243. return codeUnit.promise;
  33244. },
  33245. script: function(code, name, referrerName, address, metadata) {
  33246. var normalizedName = this.loader_.normalize(name || '', referrerName, address);
  33247. var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'script', normalizedName, referrerName, address);
  33248. var key = {};
  33249. if (name)
  33250. key = this.getKey(normalizedName, 'script');
  33251. codeUnit.metadata = this.defaultMetadata_(metadata);
  33252. this.cache.set(key, codeUnit);
  33253. this.handleCodeUnitLoaded(codeUnit);
  33254. return codeUnit.promise;
  33255. },
  33256. getKey: function(url, type) {
  33257. var combined = type + ':' + url;
  33258. if (combined in this.urlToKey) {
  33259. return this.urlToKey[combined];
  33260. }
  33261. return this.urlToKey[combined] = {};
  33262. },
  33263. getCodeUnit_: function(normalizedName, type) {
  33264. var key = this.getKey(normalizedName, type);
  33265. var codeUnit = this.cache.get(key);
  33266. return {
  33267. key: key,
  33268. codeUnit: codeUnit
  33269. };
  33270. },
  33271. getOrCreateCodeUnit_: function(name, referrerName, address, metadata) {
  33272. var normalizedName = this.loader_.normalize(name, referrerName, address);
  33273. var type = 'module';
  33274. if (metadata && metadata.traceurOptions && metadata.traceurOptions.script)
  33275. type = 'script';
  33276. var $__9 = this.getCodeUnit_(normalizedName, type),
  33277. key = $__9.key,
  33278. codeUnit = $__9.codeUnit;
  33279. if (!codeUnit) {
  33280. assert(metadata && metadata.traceurOptions);
  33281. var module = this.loader_.get(normalizedName);
  33282. if (module) {
  33283. codeUnit = new PreCompiledCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address, module);
  33284. codeUnit.type = 'module';
  33285. } else {
  33286. codeUnit = new LoadCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address);
  33287. codeUnit.type = type;
  33288. }
  33289. codeUnit.metadata = {
  33290. traceurOptions: metadata.traceurOptions,
  33291. outputName: metadata.outputName,
  33292. rootModule: metadata.rootModule
  33293. };
  33294. this.cache.set(key, codeUnit);
  33295. }
  33296. return codeUnit;
  33297. },
  33298. areAll: function(state) {
  33299. return mapToValues(this.cache).every(function(codeUnit) {
  33300. return codeUnit.state >= state;
  33301. });
  33302. },
  33303. getCodeUnitForModuleSpecifier: function(name, referrerName) {
  33304. var normalizedName = this.loader_.normalize(name, referrerName);
  33305. return this.getCodeUnit_(normalizedName, 'module').codeUnit;
  33306. },
  33307. getExportsListForModuleSpecifier: function(name, referrer) {
  33308. var codeUnit = this.getCodeUnitForModuleSpecifier(name, referrer);
  33309. var exportsList = codeUnit.metadata.moduleSymbol;
  33310. if (!exportsList) {
  33311. if (codeUnit.result) {
  33312. exportsList = new ExportsList(codeUnit.normalizedName);
  33313. exportsList.addExportsFromModule(codeUnit.result);
  33314. } else {
  33315. throw new Error(("InternalError: " + name + " is not a module, required by " + referrer));
  33316. }
  33317. }
  33318. return exportsList;
  33319. },
  33320. handleCodeUnitLoaded: function(codeUnit) {
  33321. var $__8 = this;
  33322. var referrerName = codeUnit.normalizedName;
  33323. try {
  33324. var moduleSpecifiers = codeUnit.getModuleSpecifiers();
  33325. codeUnit.state = PARSED;
  33326. if (!moduleSpecifiers) {
  33327. this.abortAll(("No module specifiers in " + referrerName));
  33328. return;
  33329. }
  33330. codeUnit.dependencies = moduleSpecifiers.map(function(name) {
  33331. return $__8.getOrCreateCodeUnit_(name, referrerName, null, $__8.defaultModuleMetadata_(codeUnit.metadata));
  33332. });
  33333. } catch (error) {
  33334. this.rejectOneAndAll(codeUnit, error);
  33335. return;
  33336. }
  33337. codeUnit.dependencies.forEach(function(dependency) {
  33338. $__8.load_(dependency);
  33339. });
  33340. if (this.areAll(PARSED)) {
  33341. try {
  33342. if (codeUnit.type === 'module')
  33343. this.analyze();
  33344. this.transform();
  33345. this.evaluate();
  33346. } catch (error) {
  33347. this.rejectOneAndAll(codeUnit, error);
  33348. }
  33349. }
  33350. },
  33351. rejectOneAndAll: function(codeUnit, error) {
  33352. codeUnit.state.ERROR;
  33353. codeUnit.error = error;
  33354. codeUnit.reject(error);
  33355. this.abortAll(error);
  33356. },
  33357. handleCodeUnitLoadError: function(codeUnit) {
  33358. var message = codeUnit.error ? String(codeUnit.error) + '\n' : ("Failed to load '" + codeUnit.address + "'.\n");
  33359. message += codeUnit.nameTrace() + this.loader_.nameTrace(codeUnit);
  33360. this.rejectOneAndAll(codeUnit, new Error(message));
  33361. },
  33362. abortAll: function(errorMessage) {
  33363. this.cache.forEach(function(codeUnit) {
  33364. if (codeUnit.state !== ERROR)
  33365. codeUnit.reject(errorMessage);
  33366. });
  33367. },
  33368. analyze: function() {
  33369. this.loaderCompiler.analyzeDependencies(mapToValues(this.cache), this);
  33370. },
  33371. transform: function() {
  33372. this.transformDependencies_(mapToValues(this.cache));
  33373. },
  33374. transformDependencies_: function(dependencies, dependentName) {
  33375. for (var i = 0; i < dependencies.length; i++) {
  33376. var codeUnit = dependencies[i];
  33377. if (codeUnit.state >= TRANSFORMED) {
  33378. continue;
  33379. }
  33380. if (codeUnit.state === TRANSFORMING) {
  33381. var cir = codeUnit.normalizedName;
  33382. var cle = dependentName;
  33383. this.rejectOneAndAll(codeUnit, new Error(("Unsupported circular dependency between " + cir + " and " + cle)));
  33384. return;
  33385. }
  33386. codeUnit.state = TRANSFORMING;
  33387. try {
  33388. this.transformCodeUnit_(codeUnit);
  33389. } catch (error) {
  33390. this.rejectOneAndAll(codeUnit, error);
  33391. return;
  33392. }
  33393. }
  33394. },
  33395. transformCodeUnit_: function(codeUnit) {
  33396. this.transformDependencies_(codeUnit.dependencies, codeUnit.normalizedName);
  33397. if (codeUnit.state === ERROR)
  33398. return;
  33399. this.loaderCompiler.transform(codeUnit);
  33400. codeUnit.state = TRANSFORMED;
  33401. this.loaderCompiler.write(codeUnit);
  33402. var info = codeUnit.metadata.compiler.sourceMapInfo;
  33403. if (info) {
  33404. this.sourceMapsByURL_[info.url] = info.map;
  33405. this.sourceMapsByOutputName_[info.outputName] = info.map;
  33406. }
  33407. this.loader_.instantiate(codeUnit);
  33408. },
  33409. orderDependencies: function() {
  33410. var visited = new Map();
  33411. var ordered = [];
  33412. function orderCodeUnits(codeUnit) {
  33413. if (visited.has(codeUnit)) {
  33414. return;
  33415. }
  33416. visited.set(codeUnit, true);
  33417. codeUnit.dependencies.forEach(orderCodeUnits);
  33418. ordered.push(codeUnit);
  33419. }
  33420. this.cache.forEach(orderCodeUnits);
  33421. return ordered;
  33422. },
  33423. evaluate: function() {
  33424. var dependencies = this.orderDependencies();
  33425. for (var i = 0; i < dependencies.length; i++) {
  33426. var codeUnit = dependencies[i];
  33427. if (codeUnit.state >= COMPLETE) {
  33428. continue;
  33429. }
  33430. var result = void 0;
  33431. try {
  33432. result = codeUnit.evaluate();
  33433. } catch (ex) {
  33434. this.rejectOneAndAll(codeUnit, ex);
  33435. return;
  33436. }
  33437. codeUnit.result = result;
  33438. codeUnit.source = null;
  33439. }
  33440. for (var i = 0; i < dependencies.length; i++) {
  33441. var codeUnit = dependencies[i];
  33442. if (codeUnit.state >= COMPLETE) {
  33443. continue;
  33444. }
  33445. codeUnit.state = COMPLETE;
  33446. codeUnit.resolve(codeUnit.result);
  33447. }
  33448. }
  33449. }, {});
  33450. }();
  33451. var internals = {
  33452. CodeUnit: CodeUnit,
  33453. EvalCodeUnit: EvalCodeUnit,
  33454. LoadCodeUnit: LoadCodeUnit,
  33455. LoaderCompiler: LoaderCompiler
  33456. };
  33457. return {
  33458. get InternalLoader() {
  33459. return InternalLoader;
  33460. },
  33461. get internals() {
  33462. return internals;
  33463. }
  33464. };
  33465. });
  33466. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/Loader.js", [], function() {
  33467. "use strict";
  33468. var __moduleName = "traceur@0.0.112/src/loader/Loader.js";
  33469. var InternalLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InternalLoader.js", "traceur@0.0.112/src/loader/Loader.js")).InternalLoader;
  33470. function throwAbstractMethod() {
  33471. throw new Error('Unimplemented Loader function, see extended class');
  33472. }
  33473. var Loader = function() {
  33474. function Loader(loaderCompiler) {
  33475. this.internalLoader_ = new InternalLoader(this, loaderCompiler);
  33476. this.loaderCompiler_ = loaderCompiler;
  33477. }
  33478. return ($traceurRuntime.createClass)(Loader, {
  33479. import: function(name) {
  33480. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33481. referrerName = $__3.referrerName,
  33482. address = $__3.address,
  33483. metadata = $__3.metadata;
  33484. var $__2 = this;
  33485. return this.internalLoader_.load(name, referrerName, address, metadata).then(function(codeUnit) {
  33486. return $__2.get(codeUnit.normalizedName);
  33487. });
  33488. },
  33489. module: function(source) {
  33490. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33491. referrerName = $__3.referrerName,
  33492. address = $__3.address,
  33493. metadata = $__3.metadata;
  33494. return this.internalLoader_.module(source, referrerName, address, metadata);
  33495. },
  33496. define: function(normalizedName, source) {
  33497. var $__3 = arguments[2] !== (void 0) ? arguments[2] : {},
  33498. address = $__3.address,
  33499. metadata = $__3.metadata;
  33500. return this.internalLoader_.define(normalizedName, source, address, metadata);
  33501. },
  33502. get: function(normalizedName) {
  33503. throwAbstractMethod();
  33504. },
  33505. set: function(normalizedName, module) {
  33506. throwAbstractMethod();
  33507. },
  33508. normalize: function(name, referrerName, referrerAddress) {
  33509. throwAbstractMethod();
  33510. },
  33511. locate: function(load) {
  33512. throwAbstractMethod();
  33513. },
  33514. fetch: function(load) {
  33515. throwAbstractMethod();
  33516. },
  33517. translate: function(load) {
  33518. throwAbstractMethod();
  33519. },
  33520. instantiate: function(load) {
  33521. throwAbstractMethod();
  33522. }
  33523. }, {});
  33524. }();
  33525. return {
  33526. get throwAbstractMethod() {
  33527. return throwAbstractMethod;
  33528. },
  33529. get Loader() {
  33530. return Loader;
  33531. },
  33532. get LoaderCompiler() {
  33533. return LoaderCompiler;
  33534. }
  33535. };
  33536. });
  33537. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/version.js", [], function() {
  33538. "use strict";
  33539. var __moduleName = "traceur@0.0.112/src/loader/version.js";
  33540. var version = '0.0.112';
  33541. return {get version() {
  33542. return version;
  33543. }};
  33544. });
  33545. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/TraceurLoader.js", [], function() {
  33546. "use strict";
  33547. var __moduleName = "traceur@0.0.112/src/loader/TraceurLoader.js";
  33548. var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/TraceurLoader.js")),
  33549. isAbsolute = $__5.isAbsolute,
  33550. resolveUrl = $__5.resolveUrl;
  33551. var Loader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Loader.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).Loader;
  33552. var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).LoaderCompiler;
  33553. var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).Options;
  33554. var systemjs = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./system-map.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).systemjs;
  33555. var webLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./webLoader.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).webLoader;
  33556. var version = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./version.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).version;
  33557. var WebPageTranscoder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../WebPageTranscoder.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).WebPageTranscoder;
  33558. var uniqueNameCount = 0;
  33559. var TraceurLoader = function($__super) {
  33560. function TraceurLoader(fileLoader, baseURL) {
  33561. var loaderCompiler = arguments[2] !== (void 0) ? arguments[2] : new LoaderCompiler();
  33562. $traceurRuntime.superConstructor(TraceurLoader).call(this, loaderCompiler);
  33563. this.fileLoader_ = fileLoader;
  33564. this.baseURL_ = baseURL && String(baseURL);
  33565. this.moduleStore_ = $traceurRuntime.ModuleStore;
  33566. }
  33567. return ($traceurRuntime.createClass)(TraceurLoader, {
  33568. get baseURL() {
  33569. return this.baseURL_;
  33570. },
  33571. set baseURL(value) {
  33572. this.baseURL_ = String(value);
  33573. },
  33574. get: function(normalizedName) {
  33575. return this.moduleStore_.get(normalizedName);
  33576. },
  33577. set: function(normalizedName, module) {
  33578. this.moduleStore_.set(normalizedName, module);
  33579. },
  33580. normalize: function(name, referrerName, referrerAddress) {
  33581. var normalizedName = this.moduleStore_.normalize(name, referrerName, referrerAddress);
  33582. if (typeof systemjs !== 'undefined' && System.map)
  33583. return systemjs.applyMap(System.map, normalizedName, referrerName);
  33584. return normalizedName;
  33585. },
  33586. locate: function(load) {
  33587. load.metadata.traceurOptions = load.metadata.traceurOptions || {};
  33588. var url = load.normalizedName;
  33589. var options = load.metadata.traceurOptions;
  33590. var baseURL = load.metadata && load.metadata.baseURL;
  33591. baseURL = baseURL || this.baseURL;
  33592. var referrer = options && options.referrer;
  33593. if (referrer) {
  33594. var minChars = Math.min(referrer.length, baseURL.length);
  33595. var commonChars = 0;
  33596. for (var i = 0; i < minChars; i++) {
  33597. var aChar = referrer[referrer.length - 1 - i];
  33598. if (aChar === baseURL[baseURL.length - 1 - i])
  33599. commonChars++;
  33600. else
  33601. break;
  33602. }
  33603. if (commonChars) {
  33604. var packageName = referrer.slice(0, -commonChars);
  33605. var rootDirectory = baseURL.slice(0, -commonChars);
  33606. if (url.indexOf(packageName) === 0) {
  33607. url = url.replace(packageName, rootDirectory);
  33608. }
  33609. }
  33610. }
  33611. if (!isAbsolute(url)) {
  33612. if (baseURL) {
  33613. load.metadata.baseURL = baseURL;
  33614. url = resolveUrl(baseURL, url);
  33615. }
  33616. }
  33617. return url;
  33618. },
  33619. sourceName: function(load) {
  33620. var options = load.metadata.traceurOptions;
  33621. var sourceName = load.address;
  33622. if (options.sourceMaps) {
  33623. var sourceRoot = this.baseURL;
  33624. if (sourceName) {
  33625. if (sourceRoot && sourceName.indexOf(sourceRoot) === 0) {
  33626. sourceName = sourceName.substring(sourceRoot.length);
  33627. }
  33628. } else {
  33629. sourceName = this.baseURL + String(uniqueNameCount++);
  33630. }
  33631. }
  33632. return sourceName;
  33633. },
  33634. nameTrace: function(load) {
  33635. var trace = '';
  33636. if (load.metadata.locateMap) {
  33637. trace += this.locateMapTrace(load);
  33638. }
  33639. var base = load.metadata.baseURL || this.baseURL;
  33640. if (base) {
  33641. trace += this.baseURLTrace(base);
  33642. } else {
  33643. trace += 'No baseURL\n';
  33644. }
  33645. return trace;
  33646. },
  33647. locateMapTrace: function(load) {
  33648. var map = load.metadata.locateMap;
  33649. return ("locate found \'" + map.pattern + "\' -> \'" + map.replacement + "\'\n");
  33650. },
  33651. baseURLTrace: function(base) {
  33652. return 'locate resolved against base \'' + base + '\'\n';
  33653. },
  33654. fetch: function(load) {
  33655. var $__2 = this;
  33656. return new Promise(function(resolve, reject) {
  33657. if (!load)
  33658. reject(new TypeError('fetch requires argument object'));
  33659. else if (!load.address || typeof load.address !== 'string')
  33660. reject(new TypeError('fetch({address}) missing required string.'));
  33661. else
  33662. $__2.fileLoader_.load(load.address, resolve, reject);
  33663. });
  33664. },
  33665. translate: function(load) {
  33666. return load.source;
  33667. },
  33668. instantiate: function($__3) {
  33669. var $__4 = $__3,
  33670. name = $__4.name,
  33671. metadata = $__4.metadata,
  33672. address = $__4.address,
  33673. source = $__4.source,
  33674. sourceMap = $__4.sourceMap;
  33675. return new Promise(function(resolve, reject) {
  33676. resolve(undefined);
  33677. });
  33678. },
  33679. bundledModule: function(name) {
  33680. return this.moduleStore_.bundleStore[name];
  33681. },
  33682. importAll: function(names) {
  33683. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33684. referrerName = $__3.referrerName,
  33685. address = $__3.address,
  33686. metadata = $__3.metadata;
  33687. var $__2 = this;
  33688. return Promise.all(names.map(function(name) {
  33689. return $__2.import(name, {
  33690. referrerName: referrerName,
  33691. address: address,
  33692. metadata: metadata
  33693. });
  33694. }));
  33695. },
  33696. loadAsScript: function(name) {
  33697. var $__4;
  33698. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33699. referrerName = $__3.referrerName,
  33700. address = $__3.address,
  33701. metadata = ($__4 = $__3.metadata) === void 0 ? {} : $__4;
  33702. metadata.traceurOptions = metadata.traceurOptions || {};
  33703. metadata.traceurOptions.script = true;
  33704. return this.internalLoader_.load(name, referrerName, address, metadata).then(function(load) {
  33705. return load.result;
  33706. });
  33707. },
  33708. loadAsScriptAll: function(names) {
  33709. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33710. referrerName = $__3.referrerName,
  33711. address = $__3.address,
  33712. metadata = $__3.metadata;
  33713. var $__2 = this;
  33714. return Promise.all(names.map(function(name) {
  33715. return $__2.loadAsScript(name, {
  33716. referrerName: referrerName,
  33717. address: address,
  33718. metadata: metadata
  33719. });
  33720. }));
  33721. },
  33722. script: function(source) {
  33723. var $__3 = arguments[1] !== (void 0) ? arguments[1] : {},
  33724. name = $__3.name,
  33725. referrerName = $__3.referrerName,
  33726. address = $__3.address,
  33727. metadata = $__3.metadata;
  33728. return this.internalLoader_.script(source, name, referrerName, address, metadata);
  33729. },
  33730. semVerRegExp_: function() {
  33731. return /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/;
  33732. },
  33733. semverMap: function(normalizedName) {
  33734. var slash = normalizedName.indexOf('/');
  33735. if (slash < 0) {
  33736. slash = normalizedName.length;
  33737. }
  33738. var versionPart = normalizedName.slice(0, slash);
  33739. var at = versionPart.indexOf('@');
  33740. if (at !== -1) {
  33741. var semver = versionPart.slice(at + 1);
  33742. var m = this.semVerRegExp_().exec(semver);
  33743. if (m) {
  33744. var major = m[1];
  33745. var minor = m[2];
  33746. var packageName = versionPart.slice(0, at);
  33747. var map = Object.create(null);
  33748. map[packageName] = versionPart;
  33749. map[packageName + '@' + major] = versionPart;
  33750. map[packageName + '@' + major + '.' + minor] = versionPart;
  33751. return map;
  33752. }
  33753. throw new Error('semverMap found no matching semver regexp in ' + semver);
  33754. }
  33755. throw new Error('semverMap expected name@semver, got ' + versionPart + ' ' + normalizedName);
  33756. },
  33757. get version() {
  33758. return version;
  33759. },
  33760. getSourceMap: function(filename) {
  33761. return this.internalLoader_.getSourceMap(filename);
  33762. },
  33763. register: function(normalizedName, deps, factoryFunction) {
  33764. $traceurRuntime.ModuleStore.register(normalizedName, deps, factoryFunction);
  33765. },
  33766. registerModule: function(normalizedName, deps, factoryFunction) {
  33767. $traceurRuntime.ModuleStore.registerModule(normalizedName, deps, factoryFunction);
  33768. },
  33769. dirname: function(filename) {
  33770. var lastSlash = filename.lastIndexOf('/');
  33771. if (lastSlash === -1)
  33772. return '.';
  33773. if (lastSlash === 0)
  33774. return '/';
  33775. return filename.slice(0, lastSlash);
  33776. }
  33777. }, {}, $__super);
  33778. }(Loader);
  33779. var BrowserTraceurLoader = function($__super) {
  33780. function BrowserTraceurLoader() {
  33781. $traceurRuntime.superConstructor(BrowserTraceurLoader).call(this, webLoader, window.location.href, new LoaderCompiler());
  33782. }
  33783. return ($traceurRuntime.createClass)(BrowserTraceurLoader, {loadScriptTypeModule: function() {
  33784. var traceurOptions = arguments[0] !== (void 0) ? arguments[0] : new Options();
  33785. new traceur.WebPageTranscoder(document.location.href, traceurOptions).run();
  33786. }}, {}, $__super);
  33787. }(TraceurLoader);
  33788. return {
  33789. get TraceurLoader() {
  33790. return TraceurLoader;
  33791. },
  33792. get BrowserTraceurLoader() {
  33793. return BrowserTraceurLoader;
  33794. }
  33795. };
  33796. });
  33797. $traceurRuntime.registerModule("traceur@0.0.112/src/node/NodeLoaderCompiler.js", [], function() {
  33798. "use strict";
  33799. var __moduleName = "traceur@0.0.112/src/node/NodeLoaderCompiler.js";
  33800. var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../loader/LoaderCompiler.js", "traceur@0.0.112/src/node/NodeLoaderCompiler.js")).LoaderCompiler;
  33801. var NodeLoaderCompiler = function($__super) {
  33802. function NodeLoaderCompiler() {
  33803. $traceurRuntime.superConstructor(NodeLoaderCompiler).call(this);
  33804. this.sourceMapsInMemory_ = false;
  33805. }
  33806. return ($traceurRuntime.createClass)(NodeLoaderCompiler, {
  33807. evaluateCodeUnit: function(codeUnit) {
  33808. var runInThisContext = require('vm').runInThisContext;
  33809. var semver = require('semver');
  33810. var content = codeUnit.metadata.transcoded;
  33811. var filename = codeUnit.address || codeUnit.normalizedName;
  33812. if (codeUnit.metadata.traceurOptions.sourceMaps === 'memory') {
  33813. this.enableMemorySourceMaps_();
  33814. }
  33815. var options;
  33816. if (semver.gte(process.version, '0.12.0')) {
  33817. options = {filename: filename};
  33818. } else {
  33819. options = filename;
  33820. }
  33821. var result = runInThisContext(content, options);
  33822. codeUnit.metadata.transformedTree = null;
  33823. return result;
  33824. },
  33825. enableMemorySourceMaps_: function() {
  33826. if (this.sourceMapsInMemory_) {
  33827. return;
  33828. }
  33829. require('source-map-support').install({retrieveSourceMap: function(url) {
  33830. try {
  33831. var map = System.getSourceMap(url);
  33832. if (map) {
  33833. return {
  33834. url: url,
  33835. map: map
  33836. };
  33837. }
  33838. } catch (ex) {
  33839. console.error('retrieveSourceMap FAILED ', ex);
  33840. }
  33841. }});
  33842. this.sourceMapsInMemory_ = true;
  33843. }
  33844. }, {}, $__super);
  33845. }(LoaderCompiler);
  33846. return {get NodeLoaderCompiler() {
  33847. return NodeLoaderCompiler;
  33848. }};
  33849. });
  33850. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/InlineLoaderCompiler.js", [], function() {
  33851. "use strict";
  33852. var __moduleName = "traceur@0.0.112/src/loader/InlineLoaderCompiler.js";
  33853. var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/InlineLoaderCompiler.js")).LoaderCompiler;
  33854. var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/loader/InlineLoaderCompiler.js")).Script;
  33855. var InlineLoaderCompiler = function($__super) {
  33856. function InlineLoaderCompiler(elements) {
  33857. $traceurRuntime.superConstructor(InlineLoaderCompiler).call(this);
  33858. this.elements = elements;
  33859. }
  33860. return ($traceurRuntime.createClass)(InlineLoaderCompiler, {
  33861. write: function() {},
  33862. evaluateCodeUnit: function(codeUnit) {
  33863. var $__1;
  33864. var tree = codeUnit.metadata.transformedTree;
  33865. ($__1 = this.elements).push.apply($__1, $traceurRuntime.spread(tree.scriptItemList));
  33866. },
  33867. toTree: function() {
  33868. return new Script(null, this.elements, null);
  33869. }
  33870. }, {}, $__super);
  33871. }(LoaderCompiler);
  33872. return {get InlineLoaderCompiler() {
  33873. return InlineLoaderCompiler;
  33874. }};
  33875. });
  33876. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/NodeTraceurLoader.js", [], function() {
  33877. "use strict";
  33878. var __moduleName = "traceur@0.0.112/src/loader/NodeTraceurLoader.js";
  33879. var TraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/NodeTraceurLoader.js")).TraceurLoader;
  33880. var NodeLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../node/NodeLoaderCompiler.js", "traceur@0.0.112/src/loader/NodeTraceurLoader.js")).NodeLoaderCompiler;
  33881. var NodeTraceurLoader = function($__super) {
  33882. function NodeTraceurLoader() {
  33883. var path = require('path');
  33884. var fileloader = require('../node/nodeLoader.js');
  33885. var url = (path.resolve('./') + '/').replace(/\\/g, '/');
  33886. $traceurRuntime.superConstructor(NodeTraceurLoader).call(this, fileloader, url, new NodeLoaderCompiler());
  33887. this.traceurMap_ = null;
  33888. }
  33889. return ($traceurRuntime.createClass)(NodeTraceurLoader, {getSourceMap: function(filename) {
  33890. var map = $traceurRuntime.superGet(this, NodeTraceurLoader.prototype, "getSourceMap").call(this, filename);
  33891. if (!map && filename.replace(/\\/g, '/').endsWith('/bin/traceur.js')) {
  33892. if (!this.traceurMap_) {
  33893. var fs = require('fs');
  33894. this.traceurMap_ = fs.readFileSync(filename + '.map', 'utf8');
  33895. }
  33896. map = this.traceurMap_;
  33897. }
  33898. return map;
  33899. }}, {}, $__super);
  33900. }(TraceurLoader);
  33901. return {get NodeTraceurLoader() {
  33902. return NodeTraceurLoader;
  33903. }};
  33904. });
  33905. $traceurRuntime.registerModule("traceur@0.0.112/src/loader/loader-imports.js", [], function() {
  33906. "use strict";
  33907. var __moduleName = "traceur@0.0.112/src/loader/loader-imports.js";
  33908. var Loader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Loader.js", "traceur@0.0.112/src/loader/loader-imports.js")).Loader;
  33909. var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).LoaderCompiler;
  33910. var BrowserTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).BrowserTraceurLoader;
  33911. var NodeLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../node/NodeLoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).NodeLoaderCompiler;
  33912. var InlineLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineLoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).InlineLoaderCompiler;
  33913. var NodeTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./NodeTraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).NodeTraceurLoader;
  33914. var TraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).TraceurLoader;
  33915. var loader = {
  33916. BrowserTraceurLoader: BrowserTraceurLoader,
  33917. InlineLoaderCompiler: InlineLoaderCompiler,
  33918. Loader: Loader,
  33919. LoaderCompiler: LoaderCompiler,
  33920. NodeLoaderCompiler: NodeLoaderCompiler,
  33921. NodeTraceurLoader: NodeTraceurLoader,
  33922. TraceurLoader: TraceurLoader
  33923. };
  33924. return {get loader() {
  33925. return loader;
  33926. }};
  33927. });
  33928. $traceurRuntime.registerModule("traceur@0.0.112/src/traceur.js", [], function() {
  33929. "use strict";
  33930. var __moduleName = "traceur@0.0.112/src/traceur.js";
  33931. var $__traceur_64_0_46_0_46_112_47_src_47_util_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util-imports.js", "traceur@0.0.112/src/traceur.js"));
  33932. var $__traceur_64_0_46_0_46_112_47_src_47_compiler_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./compiler-imports.js", "traceur@0.0.112/src/traceur.js"));
  33933. var $__traceur_64_0_46_0_46_112_47_src_47_loader_47_loader_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./loader/loader-imports.js", "traceur@0.0.112/src/traceur.js"));
  33934. return $traceurRuntime.exportStar({}, $__traceur_64_0_46_0_46_112_47_src_47_util_45_imports_46_js__, $__traceur_64_0_46_0_46_112_47_src_47_compiler_45_imports_46_js__, $__traceur_64_0_46_0_46_112_47_src_47_loader_47_loader_45_imports_46_js__);
  33935. });
  33936. $traceurRuntime.registerModule("traceur@0.0.112/src/traceur-import.js", [], function() {
  33937. "use strict";
  33938. var __moduleName = "traceur@0.0.112/src/traceur-import.js";
  33939. var traceur = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./traceur.js", "traceur@0.0.112/src/traceur-import.js"));
  33940. Reflect.global.traceur = traceur;
  33941. $traceurRuntime.ModuleStore.set('traceur@', traceur);
  33942. return {};
  33943. });
  33944. $traceurRuntime.getModule("traceur@0.0.112/src/traceur-import.js" + '');
  33945. $traceurRuntime.registerModule("traceur@0.0.112/src/browser/System.js", [], function() {
  33946. "use strict";
  33947. var __moduleName = "traceur@0.0.112/src/browser/System.js";
  33948. var BrowserTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../loader/TraceurLoader.js", "traceur@0.0.112/src/browser/System.js")).BrowserTraceurLoader;
  33949. var traceurLoader = new BrowserTraceurLoader();
  33950. Reflect.global.System = traceurLoader;
  33951. traceurLoader.map = traceurLoader.semverMap('traceur@' + traceurLoader.version);
  33952. $traceurRuntime.normalizeModuleName = traceurLoader.normalize.bind(traceurLoader);
  33953. return {get System() {
  33954. return traceurLoader;
  33955. }};
  33956. });
  33957. $traceurRuntime.getModule("traceur@0.0.112/src/browser/System.js" + '');
  33958. //# sourceMappingURL=BrowserSystem.js.map