traceur.js 1.4 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945
  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. //# sourceMappingURL=traceur.js.map